2012-04-08 48 views
20

Tôi đang cố truy cập biến thành viên chính từ một lớp mở rộng. Nhưng chạy đoạn mã sau ...Không thể truy cập biến thành viên cha trong Python

class Mother(object): 
    def __init__(self): 
     self._haircolor = "Brown" 

class Child(Mother): 
    def __init__(self): 
     Mother.__init__(self) 
    def print_haircolor(self): 
     print Mother._haircolor 

c = Child() 
c.print_haircolor() 

Gets tôi lỗi này:

AttributeError: type object 'Mother' has no attribute '_haircolor' 

Tôi đang làm gì sai?

Trả lời

27

Bạn đang trộn các thuộc tính lớp và đối tượng.

print self._haircolor 
+10

thanks- im một thằng ngốc – Yarin

19

Bạn muốn thuộc tính thể hiện chứ không phải thuộc tính lớp, vì vậy bạn nên sử dụng self._haircolor.

Ngoài ra, bạn thực sự nên sử dụng super trong __init__ trong trường hợp bạn quyết định thay đổi quyền thừa kế của mình thành Father hoặc thứ gì đó.

class Child(Mother): 
    def __init__(self): 
     super(Child, self).__init__() 
    def print_haircolor(self): 
     print self._haircolor 
+0

mVChr- bạn nói đúng tôi nên- nhờ – Yarin

+1

siêu() 's hành vi' 'là gì khi phải đối mặt với nhiều thừa kế? MRO có bình thường không? –

+1

http://stackoverflow.com/questions/3277367/how-does-pythons-super-work-with-multiple-inheritance – mVChr

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