簡體   English   中英

Python 類引用的命名約定是什么

[英]What is the naming convention for Python class references

在 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 所寫,參考文獻會很棒。

在模塊級別第二個:

ReferenceToClass = MyClass

作為函數參數,第一個:

reference_to_class = MyClass

tl;dr :對於全局/公共名稱,請使用像AllCaps所說的 AllCaps:

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 風格指南也沒有)。

由於變量名可能只是 yet-another name binding in python,在我看來,將該名稱與定義塊綁定還是稍后使用=等號綁定到某個對象並不重要。

為此,我同意XORcist的模塊級“別名”引用應該遵守您的類命名標准,可能是 AllCaps:

class MyClass(object):
    pass

# good
ReferenceToClass = MyClass

但是,當涉及到參數和變量名稱時,應該使用lowercase_underscores ,對吧? 我對此不滿意,因為它會將您推向實例與類引用的歧義。 全小寫的名稱可能會試圖暗示該對象是一個實例。 就此而言,我建議在全小寫的類引用變量名后加上“類”后綴,如下所示:

class Logger(object):
    pass

def function_expecting_class_reference(logger_class):
    pass

我將您的示例類MyClass重命名為Logger因為在實際場景中只有少數類名包含字符串"class" 然而,在后一種情況下,我建議再次避免描述性命名的歧義。 例如,您可以使用classobj后綴:

class MyClass(object):
    pass

def function_expecting_class_reference(another_param, my_class_classobj):
    ReferenceToClass = MyClass

我傾向於采用的另一種選擇是使用后綴klass ,例如my_class_klass 似乎不是每個人都得到后者,但無論如何我還沒有測試他們是否會讓前者變得更好。

我將其視為實例變量,PEP8 將其定義為使用 lowercase_underscore_style。 (小寫,必要時用下划線分隔單詞以提高可讀性。)

http://www.python.org/dev/peps/pep-0008/#id34

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM