面向对象的静态属性,类方法,静态方法

class cesuo:

    addr = '九江'
    def __init__(self, name, h, l, k):
        self.name = name
        self.h = h
        self.l = l
        self.k = k
    @property #封装逻辑,让调用用户感知不存在,只和实例绑定
    def cal(self):
        return ('%s体积是%s'%(self.name, self.h * self.l * self.k))

    @classmethod  #类方法,只和类捆绑,能访问到类的数据属性和函数属性,不能访问到实例的数据属性
    def tell_info(cls):
        print(cls.addr)

    @staticmethod  #静态方法,允许类和实例调用。不能访问类属性也不能访问实例属性,只能接收外部传值
    def test(x,y,z):
        print(x,y,z)


s1 = cesuo('公厕',12,23,11)
print(s1.cal) #通过实例的静态熟悉去调用


cesuo.tell_info() #通过类方法,把类自己传递进去,好处是不需要实例化对象出来再去访问

cesuo.test(1,2,3)  #调用静态方法
s1.test(5,6,7)

为什么要用property

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

staticmethod:

  不与类或对象绑定,类和对象都可以调用,但是没有自动传值那么一说。就是一个普通工具而已

classmethod:

classmehtod是给类用的,即绑定到类,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入)

原文地址:https://www.cnblogs.com/zhengyiqun1992/p/10177741.html