这个全局类变量如何符合pep8并仍然有效?

Ben*_*ey4 1 python variables class pep8

Pep8建议始终使用cls类方法定义的第一个参数.现在假设我想使用一个类变量(在这种情况下:) cls.cartridge_state,它也可以在实例方法中使用(在这种情况下:) __init__.因此,我需要将变量设为全局变量(请参阅下面的代码).但实例化会FountainPen生成以下运行时错误:

self.cartridge_state = cls.cartridge_state
NameError: global name 'cls' is not defined
Run Code Online (Sandbox Code Playgroud)

但是,有一次,当我改变global cartridge_stateglobal cls.cartridge_state我得到一个SyntaxError当我尝试导入模块.

class FountainPen(object):
    cartridge_ink = "water-based"
    @classmethod
    def toggle_default_cartridge_state(cls):
        i = 0
        cartridge_states = ['non-empty','empty']
        global cartridge_state
        cls.cartridge_state = cartridge_states[i]
        i += 1

    def __init__(self):
        self.cartridge_state = cls.cartridge_state
        global number_of_refills
        self.number_of_refills = 0

    def write(self):
        print Pen.write(self)
        self.cartridge_state = "empty"
        return self.cartridge_state

    def refill(self):
        self.cartridge_state = "non-empty"
        self.number_of_refills += 1
Run Code Online (Sandbox Code Playgroud)

如何让类变量cartridge_state符合pep8并使此代码正常工作?

Ned*_*der 5

可以通过self以下方式读取类属性:

class FountainPen(object):
    cartridge_ink = "water-based"
    default_cartridge_state = "empty"

    @classmethod
    def toggle_default_cartridge_state(cls):
        if cls.default_cartridge_state == "empty":
            cls.default_cartridge_state = "non-empty"  
        else:
            cls.default_cartridge_state = "empty"

    def __init__(self):
        self.cartridge_state = self.default_cartridge_state

    def write(self):
        print Pen.write(self)
        self.cartridge_state = "empty"
        return self.cartridge_state

    def refill(self):
        self.cartridge_state = "non-empty"
        self.number_of_refills += 1
Run Code Online (Sandbox Code Playgroud)