属性: 将一个方法 伪装成一个 属性,在代码的级别上没有本质的提升,但是让其看起来跟合理.
用途: 类似一些需要经过计算的方法,为了看起来更合乎逻辑,将类中的一些方法伪装成对象的属性 如: bmi(健康指数) area(面积) Perimeter(周长) 等
方法: 在需要伪装的函数名的上一行加上装饰器函数, 如果需要修改,删除这个属性,,则需要分别定义,并用装饰器进行装饰
类的方法: 通过类名调用的方法,类方法中第一个参数约定俗称cls,python自动将类名(类空间)传给cls.
class A:
def func(self): # 普通方法 =====> a1 = A() #实例化一个对象
print(self) a1.func() # 用对象正常调用 A.func(a1) #通过类正常调用
@classmethod # 类方法 ======> a1 = A() #实例化一个对象
def func1(cls): a1.func1() # 用对象调用类方法.cls得到得是类本身 A.func1() 通过类调用类方法,自动将类空间传给cls
print(cls) =====>通过子类或者子类实例化的对象.调用类方法,会自动将类名,或者对象的空间传给cls
类方法的三种应用场景:(1)类中 有些方法是不需要对象参与.
(2)对类中的静态变量进行改变,要用类方法
(3)继承中父类得到子类的类空间
class A:
age = 12
@classmethod #注意 无论是类或者实例化的对象调用类方法,都会将调用者的所属本类空间传值给cls,这样在父类中就可以修改cls中的内容,注意,实例化的属性内容无法修改
def func1(cls): # 此方法无需对象参与
print(cls)
#对B类的所有的内容可以进行修改.
print(cls.age)
# return cls.name + str(cls.count + 1)
class B(A):
age = 22
B.func1()
05 静态方法
@staticmethod =======>一般放在函数名上变边,归纳统一函数,使得函数更清晰
# 1,代码块.清晰.
# 2,复用性.