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.