2012-12-07 25 views
21

什麼是在Python中引用類的變量的命名約定?什麼是Python類引用的命名約定

class MyClass(object): 
    pass 

# which one is correct? 
reference_to_class = MyClass 

# or 
ReferenceToClass = MyClass 

這是類似於我的情況又如:

# cars.py 
class Car(object): 
    pass 

class Sedan(Car): 
    pass 

class Coupe(Car): 
    pass 

class StatonWagon(Car): 
    pass 

class Van(Car): 
    pass 

def get_car_class(slug, config): 
    return config.get(slug) 

# config.py 
CONFIG = { 
    'ford-mustang': Coupe, 
    'buick-riviera': Coupe, 
    'chevrolet-caprice': Sedan, 
    'chevy-wan' Van: 
    'ford-econoline': Van 
} 

# main.py 
from config.py import CONFIG 
from cars import get_car_class 

MyCarClass = get_car_class('buick-riviera') 

my_car = MyCarClass() 

我寧願ReferenceToClass,大家新的代碼知道這是一類,而不是一個實例。但是@ poplitea寫道,參考文獻會很棒。

+3

ReferenceToClass與MyClass在此處(語義上)完全相同。兩者都是指向同一個類對象的變量。 – Kos

回答

11

在模塊電平的第二:

ReferenceToClass = MyClass

作爲函數參數,第一:

reference_to_class = MyClass

+3

任何參考文獻? – poplitea

+3

pep8 http://www.python.org/dev/peps/pep-0008/。一個別名的行爲與類完全相同,所以它的命名應遵循與普通類命名相同的方案,我想。 – XORcist

+0

作爲一個函數參數,第一個函數參數,主要是因爲你無法確定你確實會得到一個類型的descandant(即一個類)。 –

4

TL;博士:全球/公共名稱中使用AllCaps像XORcist說:

class Logger: 
    pass 

AliasLogger = Logger 

對於功能參數和功能當地人,清楚地說明你正在用類似這樣的描述性名稱來處理類對象:

def some_func(logger_class): 
    pass 

什麼沿線

def some_func(my_class_classobj): 
    pass 

這個詞的時候"class"實際上是在你的類名。對於classobj,另請參閱class_klass


分析/激勵(加長版)

沒有徹底的閱讀,而且一目瞭然PEP 8似乎並沒有能在這個明確的(既沒有谷歌的蟒蛇風格指南爲此事)。

由於python中的變量名可能只是另一個name binding,在我看來,將該名稱與定義塊綁定在一起,還是在後面用=等號指向某個對象並不重要。

爲此,我與在模塊級的「別名」引用XORcist同意要堅持你的類命名標準,大概ALLCAPS:

class MyClass(object): 
    pass 

# good 
ReferenceToClass = MyClass 

然而,當涉及到參數和變量名,按說lowercase_underscores應適用, 對?我只對此感到不滿,因爲它會將你帶入實例和類參考的歧義之中。全小寫名稱可能是試圖暗示作爲實例的對象的潛在可能。對於這個問題,我建議加上後綴你全部小寫,類引用變量名稱與「階級」後綴,就像這樣:

class Logger(object): 
    pass 

def function_expecting_class_reference(logger_class): 
    pass 

我改名的例子類MyClassLogger因爲在現實場景中只有幾級名稱包含字符串"class"。然而,在後一種情況下,我建議避免含糊不清的描述性命名。例如,你可以使用一個classobj後綴:

class MyClass(object): 
    pass 

def function_expecting_class_reference(another_param, my_class_classobj): 
    ReferenceToClass = MyClass 

我傾向於採取另一種方法是使用後綴klass,像my_class_klass。並不是每個人都能得到後者,但無論如何我還沒有測試他們是否會讓前者更好。

+1

+1表示後綴。將變量分配給對象引用時,我經常使用「_ref」後綴來闡明和提高代碼的可讀性。 –