我想要一个类变量,以便该值可以在所有实例中都可以访问,但是我也想访问该类中的方法中的变量。那可能吗?我已经尝试过,但完全没有效果。所有类方法中的类变量访问
class myClass:
myvariable = 1
def add():
myvariable+= 1
def print1():
print myvariable
我想让两个实例,一个只能做添加方法,其他的只能做PRINT1方法
我想要一个类变量,以便该值可以在所有实例中都可以访问,但是我也想访问该类中的方法中的变量。那可能吗?我已经尝试过,但完全没有效果。所有类方法中的类变量访问
class myClass:
myvariable = 1
def add():
myvariable+= 1
def print1():
print myvariable
我想让两个实例,一个只能做添加方法,其他的只能做PRINT1方法
是的,只是访问类对象的变量:
class myClass(object):
myvariable = 1
def add(self):
myClass.myvariable += 1
def print1(self):
print myClass.myvariable
,或者要设置每个子类中,使用type(self)
:
class myClass(object):
myvariable = 1
def add(self):
type(self).myvariable += 1
def print1(self):
print type(self).myvariable
不同的是THA t后者将在设置时在任何子类上创建单独的属性,从而屏蔽基类属性。这就像在实例上设置属性会掩盖类属性一样。
虽然可以通过得到self
的类属性以及(print self.myvariable
),明确优于隐式在这里,并且避免被意外同名的实例属性掩盖。设置类属性总是必须在类上完成;将其设置为self
将创建或更新实例属性,而不是共享。
尽管继承了object
的类,使用新式课程有很多优点,但至少type(self)
将实际返回课程。在旧式课程中(不是从object
继承),您必须改用self.__class__
。
使用object
作为基础也给你第三种选择,类方法与@classmethod
decorator;当你只需要访问类对象而不是实例时使用它们。这些方法绑定到当前(亚)类的,所以他们的阶级属性的效果是一样的使用type(self)
:
class myClass(object):
myvariable = 1
@classmethod
def add(cls):
cls.myvariable += 1
@classmethod
def print1(cls):
print cls.myvariable
不要忘了你的方法'self'? – 2014-10-29 09:36:57
@MauroBaraldi:我确实。 – 2014-10-29 09:45:41
或者,更容易,你可以通过'self'访问类变量。 – Marcin 2014-10-29 09:56:31