35

Tôi biết không bao giờ sử dụng tên hàm được tích hợp làm số nhận dạng biến.Thực tiễn không tốt là sử dụng tên hàm được tích hợp làm thuộc tính hoặc định danh phương thức?

Nhưng có bất kỳ lý do nào không sử dụng chúng làm định danh thuộc tính hoặc phương pháp không?

Ví dụ, có an toàn khi viết my_object.id = 5 hoặc xác định phương pháp thể hiện dict trong lớp học của riêng tôi không?

+1

Liên quan: ['id' là tên biến xấu trong Python] (http://stackoverflow.com/q/77552/95735) –

Trả lời

29

Nó sẽ không gây nhầm lẫn cho thông dịch viên nhưng nó có thể gây nhầm lẫn cho người đọc mã của bạn. Không nên sử dụng tên dựng sẵn cho các thuộc tính và phương thức.

Một hiệu ứng khác là các nội dung đổ bóng gây nhầm lẫn tô màu cú pháp trong hầu hết các trình chỉnh sửa python (vi, emacs, pydev, nhàn rỗi, v.v.) Ngoài ra, một số công cụ lint sẽ cảnh báo về thực hành này.

13

Không, không sao. Vì một tham chiếu đối tượng là bắt buộc nên không có cách nào để chúng có bóng được tích hợp sẵn.

+1

Vì vậy, tôi có thể sử dụng bất kỳ số nhận dạng hợp lệ nào làm tên thuộc tính, ngoại trừ một tên bắt đầu bằng ' __' hoặc một từ khóa giống với từ khóa? – max

+0

bạn có thể sử dụng bất kỳ từ nào bao gồm __something hoặc từ khóa. Vâng, một số với __ có ý nghĩa đặc biệt. –

+0

Bạn có thể bắt đầu chúng bằng '__' miễn là chúng cũng * kết thúc * bằng' __'. Do lưu ý rằng Python sử dụng nhiều trong số đó cho mục đích riêng của nó mặc dù (chẳng hạn như '__dict__',' __init__', và '__new__'). –

15

Có thực tiễn không tốt. Nó có thể không ngay lập tức phá vỡ bất cứ điều gì cho bạn, nhưng nó vẫn đau đớn khả năng đọc mã.

Để chọn lọc trích dẫn từ PEP20:

Đẹp tốt hơn là xấu xí.
Đơn giản hơn là phức tạp.
Số lượng khả năng đọc.
Nếu việc thực hiện khó giải thích, đó là một ý tưởng tồi.

Thấy một cuộc gọi đến myobject.dict() nó sẽ là tự nhiên khi cho rằng nó sẽ trở myobject.__dict__, hoặc myobject.id() lợi nhuận điều tương tự như id(myobject)

Có thể cho họ để tìm hiểu rằng họ đang sai; nhưng điều đó sẽ mất thời gian và công sức và có thể dẫn đến một số sai lầm trong khi họ tìm ra. Gọi thuộc tính của bạn là myobject.object_id_number dài hơn nhiều, nhưng rõ ràng hơn là khác với id(myobject)