@classmethod

时间:2018-09-05 15:16:58

标签: python python-3.x

使用@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'未定义

1 个答案:

答案 0 :(得分:2)

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

Piza.make_for_allerg(...)

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