2012-12-07 32 views
21

Python'da bir sınıfa başvuran bir değişkene yönelik adlandırma kuralı nedir? koduna yeni Herkes bunun çok sınıf değil bir örnek olduğunu bilir,Python sınıf referansları için adlandırma kuralı nedir?

# 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() 

Ben ReferenceToClass tercih ediyorum: Burada

class MyClass(object): 
    pass 

# which one is correct? 
reference_to_class = MyClass 

# or 
ReferenceToClass = MyClass 

durumumu benzeyen başka bir örnektir. Ama @poplitea'nın yazdığı gibi, literatür referansı harika olurdu. fonksiyon parametresi olarak

ReferenceToClass = MyClass

birinci: ikinci modül seviyede

+3

ReferenceToClass aynen MyClass ile aynıdır (semantik olarak). Her ikisi de aynı sınıf nesnesine başvuran değişkenlerdir. – Kos

cevap

11

reference_to_class = MyClass

+3

Herhangi bir literatür referansı? – poplitea

+3

pep8 http://www.python.org/dev/peps/pep-0008/. Sınıfa bir takma ad tam olarak sınıf gibi davranır, bu yüzden adlandırma normal sınıf adlandırma ile aynı şemaya uygun olmalıdır. – XORcist

+0

Bir işlev argümanı olarak, ilki, esas olarak emin olamayacağınız için aslında bir türden bir tür (yani bir sınıf) elde edersiniz. –

2

ben o PEP8 olarak tanımlayan bir örnek değişkeni ile aynı tedavi lowercase_underscore_style kullanarak. (Okunabilirliğini artırmak için gerekli çizgi ile ayrılmış bir deyişle küçük harf,.)

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

4

tl; dr: Genel/küresel isimleri XORcist gibi AllCaps kullanmak için bahsedilen: işlevi için

class Logger: 
    pass 

AliasLogger = Logger 

Parametreler ve işlev yerlileri, sınıf nesnesini şu şekilde açıklayıcı bir adla ele aldığınızı açıkça belirtin:

def some_func(logger_class): 
    pass 
hatlar
def some_func(my_class_classobj): 
    pass 

kelime "class" sizin sınıfadı aslında

boyunca

falan. classobj için, ayrıca class_ ve klass'a bakın.


Analizi/Motivasyon (uzun versiyon)

yok kapsamlı okuma, ama bir bakışta PEP 8 de (bu konuda ne google'ın piton stil kılavuzu) bu konuda açık ve net olması görünmüyor.

Değişken adı python'da muhtemelen başka bir name binding olduğundan, bence, bu adı tanımlama bloğuyla veya daha sonra = bazı nesnelere eşittir işareti ile bağlamanız gerçekten önemli değil. Ben senin sınıf adlandırma standardına uyması gerektiğini modül düzeyi "takma" referanslarında XORcist katılıyorum Bunun için

, muhtemelen AllCaps:

class MyClass(object): 
    pass 

# good 
ReferenceToClass = MyClass 

Ancak parametresine ve değişken isimleri söz konusu olduğunda, güya lowercase_underscores başvurmalıdır , sağ? Sadece mutsuzum, çünkü sizi sınıf referansı belirsizliğine karşı örnekleyecektir. Tamamen küçük harfli bir adın nesnenin bir örnek olmasını ima etme olasılığı olabileceği olasılığı vardır.Hatta, ben senin her küçük harf postfixing tavsiye, sınıf-referans böyle, "sınıf" son eki ile değişken adları:

class Logger(object): 
    pass 

def function_expecting_class_reference(logger_class): 
    pass 

Çünkü gerçek senaryolar sadece birkaç sınıf içinde Logger için örnek sınıfı MyClass değiştirildi ad "class" dizesini içerir. Ancak bu son durumda, yine tanımlayıcı isimlendirmeyle belirsizliği önleme teklif ediyorum.

class MyClass(object): 
    pass 

def function_expecting_class_reference(another_param, my_class_classobj): 
    ReferenceToClass = MyClass 

Attığım eğilimi diğer alternatif my_class_klass gibi, ekini klass kullanmaktır: Örneğin, bir classobj soneki kullanabilir. Herkes ikincisini almıyor gibi görünüyor, ama yine de daha iyisi, daha iyisi olsun diye bir şey test etmiyorum.

+1

+1. Bir nesne referansına bir değişken atarken, kod okunabilirliğini açıklığa kavuşturmak ve iyileştirmek için sıklıkla bir "_ref" son eki kullanırım. –

İlgili konular