python学习笔记-类的静态属性,类方法和静态方法 静态属性 类方法 静态方法

静态属性:使用@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")就会报错,因为会传个实例本身作为参数