类与实例属性

class Room:
    style='欧式豪宅'
    def __init__(self,owner,width,length,heigh):
        self.owner=owner
        self.width=width
        self.length=length
        self.heigh=heigh
    def area(self):
        return self.width*self.length

p=Room('Alex',10,20,10)#类的实例
print(p.__dict__)#实例有的属性(通常实例只要数据属性,需要调用类的函数属性(方法)进行操作)
print(Room.__dict__)#类的数据属性与函数属性
print(p.area())#实例调用类的函数属性

静态属性

在函数属性上加@property,实例p可以通过p.area直接调用,看起来像是实例拥有了属性area

class Room:
    style='欧式豪宅'
    def __init__(self,owner,width,length,heigh):
        self.owner=owner
        self.width=width
        self.length=length
        self.heigh=heigh
    @property
    def area(self):
        return self.width*self.length

p=Room('Alex',10,20,10)#类的实例
print(p.__dict__)#实例有的属性(通常实例只要数据属性,需要调用类的函数属性(方法)进行操作)
print(Room.__dict__)#类的数据属性与函数属性
print(p.area)#实例调用类的函数属性(注意area后没有括号)
p.area=10#会报错

类方法

class Room:
    style='欧式豪宅'
    def __init__(self,owner,width,length,heigh):
        self.owner=owner
        self.width=width
        self.length=length
        self.heigh=heigh
    @property
    def area(self):
        return self.width*self.length
    def tell_style(self):
        return self.style

p=Room('Alex',10,20,10)
Room.tell_style()#会报错,直接用类访问函数得不到类属性style的值,为此必须建立一个实例,才能访问.
#当然直接用Room.style就可以得到,但是我们希望可以通过函数来访问到
print(p.tell_style())#可以用实例访问到类属性style
print(p.__dict__)
print(Room.__dict__)
于是有类方法@classmethod
class Room:
    style='欧式豪宅'
    def __init__(self,owner,width,length,heigh):
        self.owner=owner
        self.width=width
        self.length=length
        self.heigh=heigh
    @property
    def area(self):
        return self.width*self.length
    @classmethod
    def tell_style(cls):
        return cls.style

p=Room('Alex',10,20,10)
print(Room.tell_style())#可以直接用类函数访问到
print(p.tell_style())#当然实例也可以访问到,但是不推荐,因为这叫类方法,应该只是为了类去调用
print(p.__dict__)
print(Room.__dict__)

静态方法

@staticmethod
class Room:

    style='欧式豪宅'

    def __init__(self,owner,width,length,heigh):
        self.owner=owner
        self.width=width
        self.length=length
        self.heigh=heigh

    @property
    def area(self):
        return self.width*self.length

    @classmethod
    def tell_style(cls):
        return cls.style

    @staticmethod
    def wash(a):
        return '%s is washing shower'%a#静态方法,类的工具包,访问不到类与实例的属性

    def test():
        print('这不是静态方法,用类调用没问题,但不能用实例调用')


p=Room('Alex',10,20,10)
print(Room.wash('Alex'))#类可以调用
print(p.wash('Alex'))#实例可以调用
Room.test()
p.test()#会报错
print(p.__dict__)
print(Room.__dict__)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值