Tất cả các lớp bắt nguồn từ một lớp cơ sở nhất định phải định nghĩa một thuộc tính được gọi là "đường dẫn". Trong cảm giác gõ vịt tôi có thể dựa vào định nghĩa trong lớp con:Truyền tham số cho hàm tạo lớp cơ sở hoặc sử dụng biến mẫu?
class Base:
pass # no "path" variable here
def Sub(Base):
def __init__(self):
self.path = "something/"
possiblity khác sẽ được sử dụng các constructor lớp cơ sở:
class Base:
def __init__(self, path):
self.path = path
def Sub(Base):
def __init__(self):
super().__init__("something/")
tôi sử dụng Python 3.1.
Bạn thích điều gì hơn và tại sao? Có cách nào tốt hơn?
Không có gì mong manh về 'super()'. Sự mong manh là trong cú pháp 2.x, được cố định trong 3.x (mà OP đang sử dụng, như được hiển thị bởi 'super()' call), và nhiều thừa kế nói chung. Không có lý do gì để gọi phương thức baseclass trực tiếp trong Python 3.x, cú pháp 'super() .__ init (...)' không bao giờ tệ hơn và thường tốt hơn. –
đánh giá bằng cách sử dụng 'super', tôi đoán rằng deamon đang sử dụng py3k – SilentGhost
@Thomas Wouters: làm thế nào bạn sẽ sử dụng siêu nếu bạn tất cả các thừa kế và lớp cơ sở với chữ ký constructor khác nhau? Vượt qua tất cả các đối số của các lớp dẫn xuất cho tất cả các lớp cơ sở trông giống như một hack bẩn, dựa vào các tham số có tên và để các lớp cơ sở phân loại những gì chúng cần là không đẹp hơn nhiều. – kriss