2015-06-01 11 views
5

tôi có mô hình django sau:Có sử dụng "loại" làm tên thuộc tính không?

class SomeProfile(models.Model): 
    type = models.CharField(max_length=1) 

Đang sử dụng "loại" như một tên thuộc tính được coi là một thực tế xấu?

Đây là thuộc tính không shadowing "loại", do đó nó không phải là cùng một câu hỏi như this one

+1

bản sao có thể có của [Thực tiễn không tốt để sử dụng tên hàm được tích hợp làm thuộc tính hoặc định danh phương pháp?] (Http://stackoverflow.com/questions/9109333/is-it-bad-practice-to- use-a-built-in-function-name-as-an-attribute-hoặc-method-ide) –

+0

tại sao không chỉ sử dụng '_type'? –

+1

@PadraicCunningham vì dấu gạch dưới hàng đầu được sử dụng cho các tên thành viên cấp độ riêng hoặc cấp mô-đun (theo PEP-0008). Để giải quyết các tên được đặt trước, hãy sử dụng _trailing_ underscore. –

Trả lời

6

Không có gì sai với nó. Nó không phải là thành viên của python's reserved keywords.

Tuy nhiên, đặt tên một phương pháp type() có lẽ sẽ gây nhầm lẫn ...

+0

Mặc dù nó hoạt động tôi sẽ không nói rằng không có gì sai với nó. Nó có khả năng gây nhầm lẫn cho người đọc ở mức tối thiểu. – 101

+2

Làm thế nào là nó khó hiểu hơn so với cách Django sử dụng 'id'? 'Id() 'cũng là một BUILTIN ... – rnevius

+2

Yeah Tôi không nghĩ rằng nó lẫn lộn bất cứ ai vì không có cơ hội tiếp cận nó mà không cần đặt tên cho các lớp học hoặc một trường hợp (ví dụ. SomeProfile.type hoặc instance.type) – Alvaro

1

Có - thực hành xấu của nó. type là từ rất chung chung từ quan điểm từ khóa mặc dù không phải là một từ khóa dành riêng. Mặc dù nó không đưa ra bất kỳ vấn đề nào hiện tại trong ứng dụng của bạn nhưng nó có thể cung cấp trong tương lai vì nó có thể đã được sử dụng trong một số thư viện hoặc phần mở rộng python đã tồn tại.

Ví dụ: loại đang được sử dụng như là một chức năng để có được thông tin TypeCast của biến

name = "John" 
age = 12 

print type(name) 
## Above line will return "<type 'str'>" 

print type(age) 
## Above line will return "<type 'int'>" 

Sử dụng type được sử dụng như một attribute là một thói quen xấu.

+0

những là các hàm, không phải thuộc tính – Alvaro

+1

ofcourse - chức năng của nó. Nhưng việc đặt tên các thuộc tính của bạn là 'loại' chắc chắn sẽ tạo ra sự nhầm lẫn. Khi chúng ta đã biết có một hàm có tên 'type' thì tôi khuyên bạn không nên sử dụng nó như một tên thuộc tính. Điều này có thể được coi là một thực hành tốt nhất. –

+0

Điều này giống như nói rằng không sử dụng 'id', vì nó là tên của một nội trang ... – rnevius

3

Nguyên tắc chung là: không sử dụng tên được thực hiện (ví dụ type, file, int, vv) bất kể họ đang ở trong một "dành riêng" danh sách từ khóa hay không (vì python cho phép nó, nó không thực sự "dành riêng"). Điều này chủ yếu là quan trọng để tránh gặp rắc rối khi bạn thực sự cần phải sử dụng các đối tượng thực sự (mà không nhận thấy rằng bạn overrode nó tại địa phương).

Nếu bạn thực sự muốn sử dụng một trong các tên đó, chỉ cần thêm _ vào cuối (ví dụ: type_).

Trong trường hợp của bạn, vì bạn đang chỉ định type làm thuộc tính lớp, nên được xem là an toàn vì chỉ có thể truy cập thông qua lớp học (self.type hoặc SomeProfile.type).

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