Tôi mới dùng python và tôi không chắc mình đang làm gì là chính xác. Tôi có một lớp cơ sở A
và một lớp được thừa hưởng B
.Thừa kế tài sản Python
class A(object):
def __init__(self, name):
self.__name = name
@property
def name(self):
return self.__name
@name.setter
def name(self, name):
self.__name = name
class B(A):
def __init__(self, name):
super(NominalValue, self).__init__(name)
@property
def name2(self):
return self.__name2
@name2.setter
def name2(self, n):
self.__name2 = n
def toString():
print self.__name + self.__name2
if __name__ == "__main__":
instance = B('name');
instance.toString()
Khi tôi chạy nó than phiền rằng lớp B
không có bất kỳ thuộc tính __name
.
AttributeError: 'B' object has no attribute '_B__name'
Tôi rõ ràng không thực hiện kế thừa một cách chính xác. Làm thế nào để bạn xử lý các thuộc tính được thừa kế một cách chính xác và tránh lặp lại các thuộc tính trong lớp được kế thừa?
Dấu gạch dưới kép có [ý nghĩa đặc biệt] (https://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references) gây trở ngại cho kế thừa của bạn. Để truy cập thuộc tính '__name' của lớp cha, tôi nghĩ bạn cần tham chiếu đến nó là' self._A__name'. –
Như 6502 đề cập trong câu trả lời của mình, bạn không nhất thiết phải * KẾ HOẠCH * về việc phải viết một tài sản cho lớp học của bạn.Đây là một trong những điểm mạnh của các thuộc tính trong Python: nó rất dễ dàng để chuyển đổi một thuộc tính sang một thuộc tính khi đang bay. Trừ khi có thể hiểu được rằng bạn cần phải có logic tùy chỉnh để nhận, đặt hoặc xóa thuộc tính - không sử dụng thuộc tính để thực hiện. –