使用@staticmethod
时可以调用@classmethod
@dataclass
class Piza:
ingridients: List
@classmethod
def make_Pizza(cls, ingrid, allerg=False):
ingridients = ingrid
if allerg:
return cls(make_for_allerg(ingrid, allerg))
return cls(ingrid)
@staticmethod
def make_for_allerg(ingrid, allerg):
return ingrid.append(allerg)
没有过敏反应:
Piza.make_Pizza(['tomato', 'cheese'])
Piza(ingridients = ['tomato','cheese'])
过敏反应为假:
Piza.make_Pizza(['tomato', 'cheese'], allerg='pickle')
-------------------------------------------------- ---------------------------- NameError追溯(最近的呼叫 最后)在() 1个 ----> 2 Piiza.make_Piza(['tomato','cheese'],allerg ='pickle')
make_Pizza中的(cls,ingrid,allerg) 7成分=成分 8如果过敏: ----> 9 return cls(make_for_allerg(ingrid,allerg)) 10返回cls(ingrid) 11
NameError:名称'make_for_allerg'未定义
答案 0 :(得分:2)
staticmethod是类对象的属性,因此它仍由类名命名。您可以在类对象上调用它:
Piza.make_for_allerg(...)
注意:您的实现不是令人信服的静态方法用例。 list.append
的返回值始终为None
。