未使用静态属性之前:
class Room: def __init__(self,name,owner,width,length,heigh): self.name=name self.owner=owner self.width=width self.length=length self.heigh=heigh def cal_area(self): print(‘%s 住的 %s 总面积是%s‘ % (self.owner,self.name, self.width * self.length)) # return self.width * self.length r1 = Room("room01","小二",10,10,10) r1.cal_area() #小二 住的 room01 总面积是100
@property ==>使用静态属性:
class Room: def __init__(self,name,owner,width,length,heigh): self.name=name self.owner=owner self.width=width self.length=length self.heigh=heigh @property #使用静态属性 def cal_area(self): # print(‘%s 住的 %s 总面积是%s‘ % (self.owner,self.name, self.width * self.length)) #TypeError: ‘NoneType‘ object is not callable return self.width * self.length r1 = Room("room01","小二",10,10,10) print(r1.cal_area) #100 ==>调用方式发生了改变 print(r1.width) #10
当我们不想进行实例化,而需要直接获取类的属性时,可以使用类方法@classmethod
class Room: tag=1 def __init__(self,name,owner,width,length,heigh): self.name=name self.owner=owner self.width=width self.length=length self.heigh=heigh @property def cal_area(self): # print(‘%s 住的 %s 总面积是%s‘ % (self.owner,self.name, self.width * self.length)) return self.width * self.length def test(self): print(‘from test‘,self.name) @classmethod #类方法 def tell_info(cls,x): print(cls) print(‘--》‘,cls.tag,x) #print(‘--》‘,Room.tag) # def tell_info(self): # print(‘---->‘,self.tag) print(Room.tag) #1 Room.tell_info(10) #--》 1 10 #不需要进行实例化而直接获取类的属性
类的工具包@staticmethod
class Room: tag=1 def __init__(self,name,owner,width,length,heigh): self.name=name self.owner=owner self.width=width self.length=length self.heigh=heigh @property def cal_area(self): # print(‘%s 住的 %s 总面积是%s‘ % (self.owner,self.name, self.width * self.length)) return self.width * self.length @classmethod def tell_info(cls,x): print(cls) print(‘--》‘,cls.tag,x)#print(‘--》‘,Room.tag) # def tell_info(self): # print(‘---->‘,self.tag) @staticmethod #类的工具包,不与类绑定,也不与实例绑定 def wash_body(a,b,c): #可以不传参 print(‘%s %s %s正在洗澡‘ %(a,b,c)) def test(x,y): print(x,y) print(Room.__dict__) #==>‘wash_body‘: <staticmethod object at 0x000002BFB0BB4630> r1=Room(‘room12‘,‘alex‘,100,100,100000) print(r1.__dict__) #{‘width‘: 100, ‘heigh‘: 100000, ‘length‘: 100, ‘name‘: ‘room12‘, ‘owner‘: ‘alex‘}
原文:https://www.cnblogs.com/hujinzhong/p/11487391.html