2012-12-07 13 views
21

Pythonでクラスを参照する変数の命名規則とは何ですか?Pythonクラス参照の命名規則

# 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を好むだろう。ここでは

class MyClass(object): 
    pass 

# which one is correct? 
reference_to_class = MyClass 

# or 
ReferenceToClass = MyClass 

は、私の状況に似ている別の例です。しかし、@popliteaが書いたように、文献の参考文献は素晴らしいだろう。第2のモジュールレベルで

+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

関数の引数としては、主に、型のデセンダント(つまりクラス)を実際に取得するかどうかを知ることができないため、最初のものです。 –

2

IがPEP8のように定義されたインスタンス変数と同じ扱いlowercase_underscore_styleを使用します。 (読みやすさを向上させるために、必要に応じてアンダースコアで区切られた単語と小文字、。)

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

4

TL; DR:パブリック/グローバル名はXORcistよう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で(そのことについてはどちらもGoogleのPythonのスタイルガイド)この上で明示していないようです。

変数名はPythonのもう1つの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 

私はので、実際のシナリオでLoggerにわずか数クラスをあなたの例のクラスMyClassに改名:そのことについて、私はこのように、「クラス」のサフィックスを持つクラス参照変数名、あなたのすべて小文字を後に付けお勧めしますnameには文字列"class"が含まれています。しかし、後者の場合、わかりやすい命名法であいまいさを避けることを提案します。たとえば、あなたがclassobj接尾使用できます

class MyClass(object): 
    pass 

def function_expecting_class_reference(another_param, my_class_classobj): 
    ReferenceToClass = MyClass 

を私が取る傾向にあるもう一つの選択肢はmy_class_klassのように、接尾辞klassを使用することです。誰もが後者を手に入れているようには見えませんが、とにかく私はまだ彼らが前者を得るのかどうかをまだテストしていません。

+1

+1は接尾辞を示唆しています。変数をオブジェクト参照に割り当てるときに、コードの可読性を明確にし、改善するために、しばしば "_ref"接尾辞を使用します。 –