python - class类 (二) 静态属性/类方法/静态方法
静态属性:
#静态属性 = 数据属性 (@property) class mianji(): def __init__(self,x,y): self.x = x self.y = y #类的函数方法: def mj(self): z = self.x * self.y return z #类的函数方法+@property @property def mj2(self): z = self.x * self.y return z abc = mianji(10,10) print("类的属性",abc.x) print('这是mj第一个输出:',abc.mj) print('这是mj第二个输出:',abc.mj()) print("*"*10) print('这是mj2第一个输出:',abc.mj2) print('这是mj2第二个输出:',abc.mj2()) # @在一个函数前加了 @property 后,被修饰的函数转为了类的一个属性, # 所以在调用的时候不要加括号了.
类方法:
#类方法 (@classmethod) class leifangfa(): name = 'AA' def __init__(self,name): self.name = name #未修饰的类函数方法 def ff(self): print(self.name) #修饰的类函数方法 @classmethod def ff2(cls): print(cls.name) #当类调用自己的方法时,会报错(需要传递self参数) # leifangfa.ff() #那怎么样类能够调用自己的方法而不报错呢? leifangfa.ff2() #当然实例化后,实例调用这个修饰的函数方法时也只跟类方法有关,跟实例无关 abc = leifangfa("anec") #实例调用类的方法 abc.ff2()
静态方法:
#静态方法(staticmethod) #名义上归属类管理,不能使用类变量和实例变量,是类的工具包 class jingtaifangfa(): x = 1 def __init__(self,name): self.name = name @staticmethod def jtff(x,y): z = x * y return z #类调用静态方法: print(jingtaifangfa.jtff(2, 2)) #实例调用静态方法: abc = jingtaifangfa("anec") print(abc.jtff(2, 2)) #静态方法相当于剥离与类属性、方法的绑定,单独可以被类和实例调用. # 拓展: #当类方法不被修饰为静态方法时: class jingtaifangfa(): x = 1 def __init__(self,name): self.name = name def jtff(x,y): z = x * y return z #类能调用这个函数方法: print(jingtaifangfa.jtff(2, 2)) #实例是不能调用这个函数方法的 abc = jingtaifangfa("anec") print(abc.jtff(2, 2))
既要脚踏实地,也需仰望天空