2017-05-31 135 views
0

有沒有一種方法可以訪問類變量而不顯式使用類名,以防萬一我決定稍後更改類的名稱?使用類名訪問靜態變量

像這樣的事情

static_variable = 'stuff' 

className = CLASS 

def method (self): 
    className.static_variable 

這是可能以簡單的方式?

回答

self.static_variable __CLASS __。static_variable

+1

你不是隻是在做'self.TABLE'嗎? – user2357112

+0

或'__class __。TABLE',如果你打算依賴魔術'__class__'閉包變量呢? – user2357112

+2

作爲一個重要的規則:在你的類內部你不需要知道類的名字(一個例外:在python-2.x中的'super',也許在'__repr__'或'__str__'中)。每當你發現你需要你班級的名字時,可能會有更好/更簡單的方法。 – MSeifert

回答

0

任何人尋找一個答案,無論對當下是否混合靜態和實例變量是一個好主意。

有兩種簡單的方法可以解決這個問題。

首先方式

class MyClass(): 
    static_variable = 'VARIABLE' 

    def __init__(self): 
     self.instanceVariable = 'test' 

    def access_static(self): 
     print(__class__.static_variable) 

方式二

class MyClass(): 
    static_variable = 'VARIABLE' 

    def __init__(self): 
     self.instanceVariable = 'test' 

    def access_static(self): 
     print(self.static_variable) 

一個實例變量可使用類.static_variable,或使用 self.static_variable只要一個實例來訪問變量尚未在代碼中的self.static_variable中定義。

採用自主將使曖昧是否你雖然訪問靜態變量或實例變量,所以我首選做這件事的方式是簡單地在前面加上static_variable_class_而不是ClassName.static_variable

+2

請停止調用它們的靜態變量。它們被稱爲類變量;他們沒有什麼特別的靜態。 – chepner

+0

@chepner只要你知道它的作用,你稱之爲真的並不重要。我在matlab,Simulink,python,c,C++和java之間來回切換。他們都稱這些概念有些不同。我無法強調足夠多的名字是不重要的。 – Rethipher

+0

這很重要。例如,靜態方法和類方法之間存在很大差異。 *你*可能通過靜態變量知道你的意思;不要假設別人會。 – chepner