静态属性
静态属性:使用@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): return self.width*self.length r1=Room("客厅","steven",3500,5700,3000) print(r1.cal_area)#同调用属性,作用是把内在逻辑进行封装,用户感知同调用普通属性一样
类方法
类方法:使用@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): return self.width*self.length @classmethod # def tell_info(cls): print(cls) print("-->",cls.tag) Room.tell_info() #跟实例没关系,只是类调用方法
另外:实例虽然也能调用。但主要用于类调用,跟实例每关系,类也不能访问实例的属性。
静态方法
静态方法:使用@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): return self.width*self.length @classmethod def tell_info(cls): print(cls) print("-->",cls.tag) @staticmethod #不跟类绑定,也不跟实例绑定,相当于只是类的工具包 def wash_body(a,b,c): #不传self参数 print("%s %s %s 在洗澡" %(a,b,c)) Room.wash_body("steven","job","mark") #结果为:"steven job mark 在洗澡" r1=Room("卧室","steven",100,100,100) r1.wash_body("steven","job","mark") #结果为:"steven job mark 在洗澡"
如果不加@staticmethon,则是跟实例没有关系,r1.wash_body("steven","job","mark")就会报错,因为会传个实例本身作为参数