在类属性中调用类方法

时间:2017-11-10 13:58:22

标签: python

我想创建一个包含彩色符号集合的类,我希望它像一个静态变量。但我无法从class属性中调用@classmethod,即以下内容给出了错误(NameError: name 'Pegs' is not defined):

class Color:
    RED = '\033[31m'

class Pegs:
    PEG = '\u25A0'
    PEGS = {
        'red' : Pegs.generate_peg_from_color(Color.RED)
    }

    @classmethod
    def generate_peg_from_color(cls, color):
        return ''.join([color, Pegs.PEG])

是否可以在类属性中调用函数?我应该使用静态方法装饰器而不是类方法吗?为什么会产生这个错误?

1 个答案:

答案 0 :(得分:0)

class Pegs:

    PEG = '\u25A0'

    @classmethod
    def generate_peg_from_color(cls, color):
        return ''.join([color, cls.PEG])

    PEGS = {
        'red' : Pegs.generate_peg_from_color(Color.RED)
    }

你试图在定义之前调用函数。现在你可以尝试一下:

In [11]: Pegs.PEGS
Out[11]: {'red': '\x1b[31m■'}

<强> UPDATE ^

如果您要添加此类方法该怎么办:

@classmethod
def meth(cls):
    cls.PEGS = {
        'red': cls.generate_peg_from_color(Color.RED)
    }

之后达到你的班级属性?这会解决你的问题吗?