python静态属性,静态方法,类方法细述(自用笔记)

python类中的静态属性

实际上就是property特性在类中的方法前加上@property进行装饰。

    @property          
    def dizhi(self):
        return self.size

静态属性(用来封装逻辑)与实例对象绑定。
在将方法装饰成静态属性后,调用的时候就像是在调用属性(对象名.方法名)。
方法必须有返回值

    print(p1.dizhi)

像访问数据属性一样去访问area,会触发一个函数的执行,动态计算出一个值。
将一个类的方法定义成property特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个方法然后计算出来的,这种特性的使用方式遵循了统一访问的原则

python类中的静态方法(类的工具包)

与静态属性一样,需要在方法前用@staticmethod装饰,而它所装饰的方法既不和实例化对象绑定,也不和类绑定所以它既不能调用实例化对象的属性,也不能使用类的属性。

    @staticmethod       
    def area(width, height):
        print('学校有%d大' % (width*height))

可以看出width和height和对象还有类都没关系,因为其名义上是归属于类的字典里,所以调用是使用类名.方法名(参数…)调用,当然也可以使用对象进行调用(本质上一样,因为对象调用会先在对象的字典中找方法,找不到再去类的字典中找)。

print(School.__dict__)   # 这样查看类的字典
print(p1.__dict__)    # 这样查看对象的字典

python的类方法

类方法自然的是与类绑定,用classmethod装饰器装饰的方法

    @classmethod        
    def xiake(cls):
        print('%s下课了' % cls.school)

cls实际上代表的就是类名,就像self代表的是实例化对象名一样,其和类绑定只能访问类的属性调用方法时使用**类名.方法名(参数…)也可以对象名.方法名(参数)**建议使用类名调用。

示例

class School:
    school = 'hongqi'

    def __init__(self, name, size, arrd):
        self.name = name
        self.size = size
        self.arrd = arrd

    def teach(self):
        print('开始上课了')

    @classmethod        # 类方法和类绑定(只能访问类变量)
    def xiake(cls):
        print('%s下课了' % cls.school)

    @staticmethod       # 静态方法(类的工具包),不与对象绑定,也不与类绑定(不能使用类的变量,也不能使用对象的变量)
    def area(width, height):
        print('学校有%d大' % (width*height))

    @property           # 静态属性(用来封装逻辑)与实例对象绑定
    def dizhi(self):

        return self.size  # 必须有返回值


p1 = School('myschool', 4000, '小古通街道811')
print(School.__dict__)
print(p1.__dict__)
School.xiake()   # 类方法由类调用(建议使用)
p1.xiake()    # 也可以由实例对象调用,不过这样做没神魔作用
School.area(100, 100)  # 静态方法调用由类调用
p1.xiake(100, 100)  # 对象调用也行
print(p1.dizhi)  # 可以向访问数据属性一样去访问area,会触发一个函数的执行,动态计算出一个值

在这里插入图片描述运行后的结果和预期是一样的。
其中本文中提到的绑定的概念可以参考这个链接的博文
https://www.cnblogs.com/linhaifeng/articles/7341177.html

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值