我想要一個類變量,以便該值可以在所有實例中都可以訪問,但是我也想訪問該類中的方法中的變量。那可能嗎?我已經嘗試過,但完全沒有效果。所有類方法中的類變量訪問
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