2011-07-26 47 views
5

Tôi đang học python qua lặn vào python. Có vài câu hỏi và không thể hiểu được, thậm chí thông qua tài liệu.Lớp Python và phương pháp __init__

1) BaseClass

2) InheritClass

gì chính xác sẽ xảy ra khi chúng ta gán một InheritClass dụ cho một biến, khi InheritClass không chứa phương thức __init__BaseClass?

  • BaseClass__init__ phương pháp gọi là tự động
  • Ngoài ra, cho tôi biết những thứ khác điều đó xảy ra dưới mui xe.

Thực ra ví dụ về fileInfo.py đang khiến tôi đau đầu nghiêm trọng, tôi không thể hiểu được cách mọi thứ đang hoạt động. Theo dõi

Trả lời

6

Có, BaseClass.__init__ sẽ được gọi tự động. Tương tự với bất kỳ phương thức nào khác được định nghĩa trong lớp cha, nhưng không phải là lớp con. Quan sát:

>>> class Parent(object): 
... def __init__(self): 
...  print 'Parent.__init__' 
... def func(self, x): 
...  print x 
... 
>>> class Child(Parent): 
... pass 
... 
>>> x = Child() 
Parent.__init__ 
>>> x.func(1) 
1 

Trẻ thừa kế phương thức của cha mẹ. Nó có thể ghi đè lên chúng, nhưng nó không phải.

+0

Bạn muốn nói, mọi phương thức trong 'BaseClass' sẽ được gọi, bất kể gọi chúng là gì hay không ?? –

+2

Không, 'child.func' sẽ gọi' func' trong lớp cha nếu nó không tồn tại trong lớp con. – FogleBird

+2

Vấn đề là khi tạo 'Child', có một lời gọi ngầm đến phương thức' __init__' của 'Child', được thừa kế bất cứ khi nào nó không được định nghĩa rõ ràng. –

4

@FogleBird đã trả lời câu hỏi của bạn, nhưng tôi muốn thêm một cái gì đó và không thể bình luận về bài đăng của mình:

Bạn cũng có thể muốn nhìn vào super function. Đó là một cách để gọi phương thức của cha mẹ từ bên trong một đứa trẻ. Nó rất hữu ích khi bạn muốn mở rộng một phương pháp, ví dụ:

class ParentClass(object): 
    def __init__(self, x): 
     self.x = x 

class ChildClass(ParentClass): 
    def __init__(self, x, y): 
     self.y = y 
     super(ChildClass, self).__init__(x) 

này có thể tất nhiên bao gồm phương pháp mà rất nhiều phức tạp hơn, không các __init__ phương pháp hoặc thậm chí là một phương pháp mà theo cùng tên!

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