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_state
成global 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并使此代码正常工作?
可以通过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)