第十六天-面向对象02-成员
2018-11-09 02:39:35来源:博客园 阅读 ()
# 类的成员:类中写的内容就是成员
# class 类名:
# 方法
# def __init__(self, 参数1, 参数2....):
# 属性变量
# self.属性1 = 参数1
# self.属性2 = 参数2
# ....
# 方法
# def method(self):
# pass
'''
上面代码中__init__和method都属于类的成员方法.又称为实例方法.需用对象来访问.而上?的self.属性1 = 参数1
这个代码含义是给对象设置属性信息.这个对象的xxx属性是xxxx.被称为成员变量或实例变量或者字段,类中还存在其他成员
'''
# 类的成员——变量:
# 实例变量 每个实例都应该拥有的变量. 如实例人.?的名字,?的爱好,每个?的个?信息.
# 类变量 一类事物统一拥有的变量 如.各位都是中国?.那大家都拥有同一个国家
1 class Person: 2 country = "中国" # 类变量,表示所有的该类对象都共享这个变量 3 def __init__(self,name,age): 4 # 实例变量/成员变量/字段 表示你创建的每一个人都有这两个变量 5 self.name = name 6 self.age = age 7 8 p1 = Person("麻花藤",45) 9 print(p1.name) 10 print(p1.country) # 中国 11 12 p2 = Person("流动墙",46) 13 print(p2.name) 14 print(p2.country) # 中国
# 如上对象p1 p2的name都是对象自己的,但是country是公用的类的
# Person.country = "大明" # 通过类名修改类变量 后面都跟着改变 p1.country ="越国" # 通过对象名修改实例变量 只对这个对象有效 print(p1.name) print(p1.country) print(p2.name) print(p2.country) # 类变量,最好是用类名来访问.当然,通过对象名也可以访问.但只能看,不能改变.想要改它,需要用类名
# 总结:
# 实例变量,给对象用的
# 类变量,多个对象共享的,最好是用类名来访问,更规范
# 类的成员-方法
# 实例方法(成员方法)
# 作用于对象 用的最多
1 class Car: 2 def run(self): # 实例方法 3 print("音速走你") 4 5 def fly(self): # 实例方法 6 print("起飞走你") 7 8 c = Car() 9 c.run() # 对象直接调用实例方法 10 c.fly()
# 类方法:
# 使用类方法需要在类方法前面添加一个 @classmethod
1 class Person: 2 def chi(self): # 实例方法 3 print("人在吃") 4 5 @classmethod # 类方法 6 def he(cls): # cls 类 7 # print(cls) # <class '__main__.Person'> 8 print("我是喝") 9 10 @classmethod 11 def shui(cls,a,b): # 类方法在被调用时也不需要传递实例对象.但系统会自动的把类传递给第一个参数 12 return a+b 13 14 # print(Person) # <class '__main__.Person'> 15 Person.he() 16 print(Person.shui(1,2)) # 此时会自动把类名传递给第一个参数 17 p = Person() 18 p.he() # 类也可以访问 但不推荐 不管是类还是对象访问类方法 默认传递(cls)的都是类
# 静态方法: 作用于类
# 不需要给方法传递self
# 使用静态方法需要在前面添加一个 @staticmethod
1 class Person: 2 @staticmethod # 静态方法 可理解成类里面的函数 3 def shui(): 4 print("我是睡") 5 6 @classmethod # 类方法 7 def he(cls): # cls 类 8 # print(cls) # <class '__main__.Person'> 9 print("我是喝") 10 11 Person.shui() # 类名可直接访问 12 p = Person() 13 p.shui() # 也能调用 但很少这样用 以便区分静态方法和实例方法
# 属性:
# 属性其实就是通过方法改造过来的一种变量的写法,在方法上添加一个 @property
1 class User: 2 def __init__(self,name,birthday,qq): 3 self.name = name 4 self.birthday = birthday 5 self.qq = qq 6 7 @property # 可以把一个方法变成属性 8 def age(self): 9 return 2018 - self.birthday 10 @property 11 def email(self): 12 return "123@163.com" 13 14 u = User("张三",1994,123485) 15 re = u.birthday # 调用属性不需要括号 16 print(re) 17 print(User.email)
# 注意:
# 1. 方法参数只能有一个self
# 2. 方法上方要写@property
# 3. 调用时,不需要写括号.直接当成属性变量来用
# 4. 这种套路只能取值.不能设置值
# 私有: (一般不用)
# 应用于某些不能公开、公共的对象,如...你老婆
# python中使用__作为方法或者变量的前缀 那么这个方法或者变量就是私有的
1 # 私有变量: 实例变量 类变量 2 class Person: 3 def __init__(self,wife,secret): 4 self.__wife = wife 5 self.__secret = secret 6 7 wangnm = Person("王尼美","嘘...") 8 # print(wangnm.__wife) # 报错 'Person' object has no attribute '__wife' 9 # 程序报错 私有内容外部是不能直接访问到的 10 11 # 但如果开辟外界访问通道(公用方法) 那就可以通过这个公用的方法来获取到私有内容 但只能看不能改 12 class Person: 13 __zisi = "有些方面,谁都是自私的" # 类变量也可以用 私有属性 14 def __init__(self,wife,secret): 15 self.__wife = wife # 私有 16 self.__secret = secret 17 18 def tell(self): 19 print("大喇叭开播啦~~") 20 return self.__secret,self.__wife 21 22 wangnm1 = Person("王尼美","嘘...") 23 print(wangnm1.tell()) # 借助tell方法成功访问到秘密 24 # print(Person.__zisi) # 类变量同样报错
# 私有方法
# 私有方法,顾名思义,只能自己访问的方法.别人都不能随便调用.如: 你和你女朋友约会.你希望别?来调用么?
1 class Person: 2 def __init__(self): 3 pass 4 5 def __yue(self): 6 print("我们在约会") 7 8 def work(self): 9 print("努力搬砖中") 10 11 p = Person() 12 # p.yue() # 报错 __yue是一个私有的方法.只能在类中自己调用.类外不能直接访问. 13 p.work() 14 15 # 同样,私有方法也是相对而言的.我们可以通过其他方法来访问到 16 class Person: 17 def __init__(self): 18 pass 19 20 def __yue(self): 21 print("我们在约会") 22 23 def work(self): 24 print("努力搬砖中") 25 self.__yue() # 在自己类中访问自己的其他方法.哪怕是私有的.也是自己在用 26 27 # 类方法与静态方法也和实例方法一样 28 @classmethod 29 def __yue1(cls): 30 print("ta们在约会") 31 32 @staticmethod 33 def __yue2(): 34 print("ta们在约会") 35 36 @property 37 def __yue3(self): 38 return "ta们在约会" 39 40 41 p = Person() 42 p.work() # 努力搬砖中 我们在约会 43 # Person.__yue1() # 报错 44 # Person.__yue2() 45 # Person.yue3 # 报错 找不到
# 不过需要注意的是,对于私有内容而言,子类是无法继承的!
1 class Fu: 2 def __init__(self): 3 pass 4 def __qingfu(self): 5 print("情妇_如花...") 6 7 class Zi(Fu): 8 pass 9 10 re = Zi() 11 # print(re.__qingfu) # 报错 'Zi' object has n
——————————————相关练习———————————————
1 # 现有500W条数据.请使用面向对象的思维来完成这500W条数据的分页工作 2 3 class Page: 4 ''' 5 lst为数据总条数,pagesize为每页显示多少条数据 6 ''' 7 def __init__(self,lst,pagesize): 8 self.lst = lst # 总数据 9 self.pagesize = pagesize # 每页显示的数据 10 11 def start(self): 12 ''' 13 返回首页 14 :return: 15 ''' 16 return self.lst[0:self.pagesize] 17 18 def index(self): 19 y = int(input("请输入你要现实的页码\n")) 20 return self.lst[(y-1)*self.pagesize:y*self.pagesize] 21 22 @property 23 def total_page(self): # 求页码数 24 if len(self.lst) % self.pagesize == 0: 25 return len(self.lst) // self.pagesize 26 else: 27 return len(self.lst) // self.pagesize + 1 28 29 def end(self): 30 ''' 31 返回尾页 32 :return: 33 ''' 34 return self.lst[(self.total_page-1)*self.pagesize:self.total_page*self.pagesize] 35 36 37 38 lst = [1,2,3,4,5,6,7,8,9,10,11,12,13,14] 39 s1 = Page(lst,3) 40 print(s1.start()) 41 print(s1.end()) 42 print(s1.index()) 43 ''' 44 每页3条数据 第y页显示的数据:[(y-1)*3:3*y] 45 1 2 3 4 5 46 [0:3] [3:6] [6:9] [9:12] [12:] 47 每页4条数据 第y页显示的数据:[(y-1)*4:4*y] 48 1 2 3 4 49 [0:4] [4:8] [8:12] [12:] 50 '''
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Python之对象持久化笔记 2019-08-13
- Python基础总结之初步认识---class类的继承(终)。第十六天 2019-08-13
- python之函数、面向对象 2019-08-13
- Python的面向对象2 2019-07-24
- Python之路【第九篇】:Python面向对象 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash