这里有一些关于classmethod的实用技巧。classmethod是一个非常实用的装饰器,可以用来改变类创建的对象的形状。比如这样一段代码:classPet:def__init__(self,name):self.name=name传入一个名字,初始化一个Pet对象,如果你觉得这样太单调,想实现一个非常个性化的初始化方法,可以修改__init__函数的代码。但是,在某些情况下,您无法修改__init__函数的代码。比如代码运行了很久,很多地方调用了Pet的__init__方法。如果直接修改,可能会出现很多问题。这时候可以使用装饰器classmethod自定义对象的创建方法:importrandomclassPet:def__init__(self,name):self.name=name@classmethoddefcreate(cls):number=random.randint(100_000,999_999)returncls(f"Pet_{number}")然后可以这样调用,输出结果在注释里。dog=Pet("Dog")print(dog.name)#Dogpet=Pet.create()print(pet.name)#Pet_444383print(isinstance(dog,Pet))#Trueprint(isinstance(pet,Pet))#True另外,标准库中有很多使用classmethod的例子,比如dict.fromkeys就是一个例子:>>>dict.fromkeys("ABC",0){'A':0,'B':0,'C':0}>>>dict.fromkeys(["hello","world"]){'hello':None,'world':None}
