Python 所有类方法中的类变量访问
我希望有一个类变量,以便可以在所有实例中访问该值,但我也希望在类内的方法中访问该变量。可能吗?我试过这个,但根本不起作用Python 所有类方法中的类变量访问,python,class,instance,Python,Class,Instance,我希望有一个类变量,以便可以在所有实例中访问该值,但我也希望在类内的方法中访问该变量。可能吗?我试过这个,但根本不起作用 class myClass: myvariable = 1 def add(): myvariable+= 1 def print1(): print myvariable 我想创建两个实例,一个只做add方法,另一个只做print1方法是的,只需访问类对象上的变量: class myClass(object): myv
class myClass:
myvariable = 1
def add():
myvariable+= 1
def print1():
print myvariable
我想创建两个实例,一个只做add方法,另一个只做print1方法是的,只需访问类对象上的变量:
class myClass(object):
myvariable = 1
def add(self):
myClass.myvariable += 1
def print1(self):
print myClass.myvariable
或者,如果要按子类设置,请使用type(self)
:
区别在于后者在设置时会在任何子类上创建一个单独的属性,从而屏蔽基类属性。这就像在实例上设置属性会屏蔽class属性一样
虽然您也可以通过self
获取class属性(print self.myvariable
),但这里显式优于隐式,并且避免了意外地被同名的实例属性遮罩。设置类属性始终必须在类上完成;将其设置为self
将创建或更新实例属性(非共享)
但是要从object
继承类;使用新样式的类有很多优点,至少type(self)
将实际返回该类。在旧式类中(不是从对象继承的
),您必须使用self.\uuu class\uuu
使用对象
作为基础还提供了第三个选项,即使用;当您只需要访问类对象而不需要访问实例时,请使用这些。这些方法绑定到当前(子)类,因此它们对类属性的影响与使用type(self)
相同:
你忘了方法中的
self
了吗?@MauroBaraldi:确实忘了。或者,更简单的是,你可以通过self
访问类变量@Marcin:no,在访问self
时不能设置。如果您同时拥有一个实例和一个类属性,那么您肯定需要直接在类上访问它。还有显式优于隐式。啊,我没想到这是关于变异共享变量的。
class myClass(object):
myvariable = 1
def add(self):
type(self).myvariable += 1
def print1(self):
print type(self).myvariable
class myClass(object):
myvariable = 1
@classmethod
def add(cls):
cls.myvariable += 1
@classmethod
def print1(cls):
print cls.myvariable