# 类的静态属性:把函数属性变成数据属性,这样进行了伪装,表面上看是数据属性,实质是函数属性,静态方法语法糖:@property a='aa' b='bb' class Room(): tag='建筑物' #类的静态属性 def __init__(self,name,long,width): self.long=long self.width=width self.name=name @property #在方法属性前加上 @property,使该方法属性变成了类的静态属性,调用方法:实例.方法名,作用:伪装成静态属性,让用户不知道其内部逻辑 def cal_area(self): print('%s房子的面积是%d'%(self.name,self.width*self.long)) def owner(self): print('this is %s hours'%self.name) #类方法:将方法属性只跟类绑定,与实例无关,语法糖@classmethod,在类字典中 @classmethod def tell_info(cls):#自动填入cls,即与类绑定 print('类型--->',cls.tag) #类静态方法:与类和实例都不绑定,它只是名义归属类管理,不能使用类变量和实例变量,是类的工具包,语法糖@staticmethod @staticmethod def test(a,b): #不自动填入cls和self,表明不和任何绑定,类和实例都可调用 print('%s 和 %s正在玩耍'%(a,b)) #print(self.width) 不能使用实例变量 #print(cls.tag) 也不能使用类变量 r1=Room('xm',1,5) r2=Room('mf',30,50) r1.cal_area #变成静态属性后, r1.cal_area()变成调用属性一样r1.cal_area r2.cal_area # r2.cal_area()--》r2.cal_area Room.owner(r1)#一般方法属性,用类调用时,必需传入一个实例对象,类型---> 建筑物 Room.tell_info()#类方法,用类调用,就不用传入实例对象了,这样与实例无任何关系了 Room.test('小红','小白')#小红 和 小白正在玩耍 r1.test('小黑','小王')#小黑 和 小王正在玩耍 r2.test(a,b)#aa 和 bb正在玩耍
python-33 面向对象之二:静态、组合、继承
猜你喜欢
转载自www.cnblogs.com/Zhouzg-2018/p/10279934.html
今日推荐
周排行