Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Kế thừa lớp trong Python

Thay vì bắt đầu từ con số không, bạn có thể tạo một lớp bằng cách kế thừa từ một lớp đã tồn tại bằng cách liệt kê lớp cha trong ngoặc đơn sau tên lớp mới.

Lớp con kế thừa các thuộc tính của lớp cha, và bạn có thể sử dụng các thuộc tính đó như thể chúng được định nghĩa trong lớp con. Lớp con cũng có thể ghi đè các thành viên dữ liệu và phương thức từ lớp cha.

Cú pháp

Các lớp dẫn xuất được khai báo rất giống với lớp cha của chúng; tuy nhiên, một danh sách các lớp cơ sở để kế thừa được đưa ra sau tên lớp:

class SubClassName (ParentClass1[, ParentClass2, ...]):
    'Optional class documentation string'
    class_suite

Ví dụ

#!/usr/bin/python
class Parent:
    # định nghĩa lớp cha
    parentAttr = 100
    def __init__(self):
        print "Calling parent constructor"
    def parentMethod(self):
        print 'Calling parent method'
    def setAttr(self, attr):
        Parent.parentAttr = attr
    def getAttr(self):
        print "Parent attribute :", Parent.parentAttr

class Child(Parent):
    # định nghĩa lớp con
    def __init__(self):
        print "Calling child constructor"
    def childMethod(self):
        print 'Calling child method'

c = Child()   # instance của child
c.childMethod() # child gọi phương thức của nó
c.parentMethod() # gọi phương thức của parent
c.setAttr(200) # lại gọi phương thức của parent
c.getAttr() # lại gọi phương thức của parent

Kết quả

Khi mã trên được thực thi, nó cho kết quả sau:

Calling child constructor
Calling child method
Calling parent method
Parent attribute : 200

Tương tự, bạn có thể dẫn xuất một lớp từ nhiều lớp cha như sau:

class A:
    # định nghĩa lớp A .....
class B:
    # định nghĩa lớp B .....
class C(A, B):
    # subclass của A và B
    .....

Bạn có thể sử dụng issubclass() hoặc isinstance() để kiểm tra mối quan hệ giữa hai lớp và các instance.

  • issubclass(sub, sup) hàm boolean trả về true nếu subclass con thực sự là subclass của superclass sup.
  • isinstance(obj, Class) hàm boolean trả về true nếu obj là instance của class Class hoặc là instance của một subclass của Class.