2012-12-07 40 views
21

Quy ước đặt tên cho một biến tham chiếu một lớp bằng Python là gì?Quy ước đặt tên cho tham chiếu lớp Python

class MyClass(object): 
    pass 

# which one is correct? 
reference_to_class = MyClass 

# or 
ReferenceToClass = MyClass 

Dưới đây là một ví dụ tương tự như hoàn cảnh của tôi:

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

Tôi muốn ReferenceToClass, rằng tất cả mọi người mới để mã biết đó là một lớp và không phải là một ví dụ. Nhưng như @poplitea đã viết, tài liệu tham khảo sẽ là tuyệt vời.

+3

ReferenceToClass hoàn toàn giống với MyClass tại đây (ngữ nghĩa). Cả hai đều là các biến tham chiếu đến cùng một đối tượng lớp. – Kos

Trả lời

11

On cấp module thứ hai:

ReferenceToClass = MyClass

Là một lập luận chức năng, là người đầu tiên:

reference_to_class = MyClass

+3

Bất kỳ tài liệu tham khảo văn học nào? – poplitea

+3

pep8 http://www.python.org/dev/peps/pep-0008/. Một bí danh cho lớp hoạt động chính xác như lớp, do đó, việc đặt tên nó phải tuân theo cùng một lược đồ như đặt tên lớp bình thường, tôi nghĩ vậy. – XORcist

+0

Là một đối số chức năng, đầu tiên, chủ yếu là bởi vì bạn không thể biết chắc chắn bạn sẽ thực sự có được một descandant loại (tức là một lớp học). –

2

tôi đối xử với nó giống như một biến Ví dụ, mà PEP8 định nghĩa như sử dụng lowercase_underscore_style. (Chữ thường, với các từ cách nhau bởi dấu gạch dưới khi cần thiết để cải thiện khả năng đọc.)

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

4

tl; dr: cho tên toàn cầu/công cộng sử dụng AllCaps như XORcist nói:

class Logger: 
    pass 

AliasLogger = Logger 

Đối với chức năng thông số và hàm địa phương, làm rõ rằng bạn đang xử lý đối tượng lớp với tên mô tả như sau:

def some_func(logger_class): 
    pass 

hoặc một cái gì đó dọc theo dòng

def some_func(my_class_classobj): 
    pass 

khi từ "class" là thực sự trong classname của bạn. Đối với classobj, xem thêm class_klass.


Phân tích/Động lực (phiên bản dài)

Không đọc kỹ lưỡng, nhưng trong nháy mắt PEP 8 dường như không được rõ ràng về vấn đề này (hướng dẫn phong cách trăn không phải của google cho rằng vấn đề).

Vì tên biến có lẽ chỉ là name binding trong python, theo ý kiến ​​của tôi nó không quan trọng cho dù bạn liên kết tên đó với khối định nghĩa hoặc sau đó với dấu bằng bằng = đối với một số đối tượng.

Đối với điều này tôi đồng ý với XORcist trong đó cấp module tài liệu tham khảo "bí danh" phải tuân theo tiêu chuẩn lớp đặt tên của bạn, có lẽ AllCaps:

class MyClass(object): 
    pass 

# good 
ReferenceToClass = MyClass 

Tuy nhiên khi nói đến tham số và tên biến, được cho là lowercase_underscores nên áp dụng , đúng? Tôi không hài lòng với điều đó, vì nó sẽ đẩy bạn vào ví dụ so với sự mơ hồ tham chiếu lớp học. Có khả năng là một tên tất cả các chữ thường có thể là một nỗ lực để gợi ý đối tượng là một cá thể.Cho rằng vấn đề, tôi khuyên bạn nên postfixing của bạn hoàn toàn chữ thường, đẳng cấp tham khảo tên biến với "đẳng cấp" hậu tố, như thế này:

class Logger(object): 
    pass 

def function_expecting_class_reference(logger_class): 
    pass 

tôi đổi tên ví dụ của bạn lớp MyClass-Logger bởi vì trong kịch bản thực tế chỉ có một vài lớp tên chứa chuỗi "class". Tuy nhiên trong trường hợp sau đó tôi đề nghị tránh sự mơ hồ với việc đặt tên mô tả một lần nữa. Ví dụ, bạn có thể sử dụng một hậu tố classobj:

class MyClass(object): 
    pass 

def function_expecting_class_reference(another_param, my_class_classobj): 
    ReferenceToClass = MyClass 

Một thay thế tôi có xu hướng để có được để sử dụng hậu tố klass, như my_class_klass. Không phải tất cả mọi người dường như có được thứ hai, nhưng dù sao tôi vẫn chưa kiểm tra xem họ sẽ có được cựu bất kỳ tốt hơn.

+1

+1 để đề xuất hậu tố. Tôi thường sử dụng hậu tố "_ref" để làm rõ và cải thiện khả năng đọc mã khi gán một biến cho tham chiếu đối tượng. –

Các vấn đề liên quan