Tôi tương đối mới đối với Python và đấu tranh để hòa giải các tính năng của ngôn ngữ với các thói quen tôi đã chọn từ nền của mình trong C++ và Java.Chức năng không phải thành viên và thành viên trong Python
Vấn đề mới nhất Tôi đang gặp đã làm với đóng gói, đặc biệt là một ý tưởng tốt nhất tóm tắt lên bởi mục 23 của Meyer "Effective C++":
Bỏ qua việc thiếu một cơ chế friend
trong chốc lát, được các hàm không thành viên xem xét thích hợp hơn để chức năng thành viên bằng Python, quá?
Một bắt buộc, ví dụ ngu si:
class Vector(object):
def __init__(self, dX, dY):
self.dX = dX
self.dY = dY
def __str__(self):
return "->(" + str(self.dX) + ", " + str(self.dY) + ")"
def scale(self, scalar):
self.dX *= scalar
self.dY *= scalar
def scale(vector, scalar):
vector.dX *= scalar
vector.dY *= scalar
Với v = Vector(10, 20)
, chúng ta có thể bây giờ hoặc là gọi v.scale(2)
hoặc scale(v, 2)
tăng gấp đôi độ lớn của vector.
Xem xét thực tế rằng chúng tôi đang sử dụng các thuộc tính trong trường hợp này, lựa chọn nào trong số hai tùy chọn - nếu có bất kỳ - nào tốt hơn và tại sao?
Tôi cảm thấy điều này đơn giản là không đúng trong Python. Các đối số không thực sự ngồi với Python, nơi bạn có thể sửa đổi các lớp học dễ dàng như vậy. Python cũng tập trung vào khả năng đọc và tôi cảm thấy rằng '' v.scale (2) '' rõ ràng hơn nhiều so với '' scale (v, 2) ''. Nếu bạn nhìn vào thư viện chuẩn, tất cả nhưng các chức năng chung nhất được giữ như các thành viên chứ không phải là nội trang. –