classmethod魔法方法和staticmethod
- staticmethod,静态方法
- classmethod,绑定类方法
- __call__,可调用类类方法
staticmethod,静态方法
在python中,使用静态方法可以实现不需要实例化对象的绑定就可以直接调用的函数,换句话
就是可以把独立的函数写入到一个类里面
xx:公有变量
_xx:单下划线,私有化属性或方法,类对象和子类可以访问,from somemodule import *禁止导入
__xx:双下划线,私有化属性或方法,无法在外部直接访问(名字改写不能访问)
xx:双前后下划线,系统定义名字(用户避免使用)
xx_:单下划线,用于避免与Python关键词的冲突
class A:
__x=520
_y=100
@staticmethod
def func():
print('静态方法例子')
#如果我不直接一个实例化对象直接调用func函数
A.func()
#我使用一个实例化例子再去访问func函数,效果是一样的,
#都是输出:静态方法例子
a=A()
a.func()
#a._y#本行结果与下一行结果一致
A._y
a._A__x
classmethod,绑定类方法
类方法可以实现对类的绑定,关键字 @classmethod
比如我想知道本身这个类被实例化了几次,就可以使用该方法
class A():
count=0
def __init__(self):
A.count+=1
@classmethod
def get_class_used(cls):
print(f"一共实例化了{cls.count}次对象")
a1=A()
a2=A()
A.get_class_used()
输出:一共实例化了2次对象
call,可调用类类方法
python的__call__魔法方法
class A:
def __init__(self,exp):
self.exp=exp
def __call__(self,base):
return base**self.exp
#callable(A) 返回True
#这里A相当于是一个可以调用的对象了(python里面对象分为可以调用和不可以调用)
a=A(2)
a(3)#相当与计算3的平方
a(10)#相当于计算10的平方