使用@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'])



  比萨(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'未定义

最佳答案

静态方法是类对象的属性,因此它仍由类名称命名。您可以在类对象上调用它:

Piza.make_for_allerg(...)


注意:您的实现不是静态方法的令人信服的用例。 list.append的返回值始终为None

关于python - 在@classmethod期间调用@staticmethods,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52188574/

10-12 19:34