Chúng ta có thể mở rộng một lớp trong Python không?

Kế thừa cho phép chúng ta định nghĩa một lớp kế thừa tất cả các phương thức và thuộc tính từ một lớp khác

Lớp cha là lớp được kế thừa từ đó, còn được gọi là lớp cơ sở

Lớp con là lớp kế thừa từ lớp khác, còn gọi là lớp dẫn xuất


Tạo một lớp cha

Bất kỳ lớp nào cũng có thể là lớp cha, vì vậy cú pháp giống như tạo bất kỳ lớp nào khác

Ví dụ

Tạo một lớp tên là Person, với các thuộc tính firstnamelastname, và một phương thức printname

lớp người
def __init__(bản thân, fname, lname)
bản thân. tên = fname
bản thân. họ = l'name

tên in def (tự)
in (tự. tên, bản thân. họ)

#Sử dụng lớp Person để tạo một đối tượng, sau đó thực thi phương thức printname

x = Người("John", "Doe")
x. tên in ()

Tự mình thử »


Tạo một lớp con

Để tạo một lớp kế thừa chức năng từ một lớp khác, hãy gửi lớp cha dưới dạng tham số khi tạo lớp con

Ví dụ

Tạo một lớp tên là Student, lớp này sẽ kế thừa các thuộc tính và phương thức từ lớp Person

lớp Sinh viên(Người)
vượt qua

Ghi chú. Sử dụng từ khóa pass khi bạn không muốn thêm bất kỳ thuộc tính hoặc phương thức nào khác vào lớp

Bây giờ lớp Sinh viên có các thuộc tính và phương thức giống như lớp Người

Ví dụ

Sử dụng lớp Student để tạo một đối tượng, sau đó thực thi phương thức printname

x = Sinh viên("Mike", "Olsen")
x. tên in ()

Tự mình thử »



Thêm chức năng __init__()

Cho đến giờ chúng ta đã tạo một lớp con kế thừa các thuộc tính và phương thức từ lớp cha của nó.

Chúng tôi muốn thêm hàm __init__() vào lớp con (thay vì từ khóa pass)

Ghi chú. Hàm __init__() được gọi tự động mỗi khi lớp được sử dụng để tạo một đối tượng mới

Ví dụ

Thêm hàm __init__() vào lớp Student

lớp Sinh viên(Người)
def __init__(bản thân, fname, lname)
#thêm thuộc tính, v.v.

Khi bạn thêm hàm __init__(), lớp con sẽ không còn kế thừa hàm __init__() của lớp cha

Ghi chú. Hàm __init__() của con sẽ ghi đè quyền thừa kế của hàm __init__() của cha mẹ

Để giữ tính kế thừa của hàm __init__() của cha mẹ, hãy thêm lệnh gọi tới hàm __init__() của cha mẹ

Ví dụ

lớp Sinh viên(Người)
def __init__(bản thân, fname, lname)
Người. __init__(bản thân, fname, lname)

Tự mình thử »

Bây giờ chúng ta đã thêm thành công hàm __init__() và giữ nguyên tính kế thừa của lớp cha và chúng ta đã sẵn sàng thêm chức năng trong hàm __init__()


Sử dụng hàm super()

Python cũng có một hàm lastname1 sẽ làm cho lớp con kế thừa tất cả các phương thức và thuộc tính từ lớp cha của nó

Ví dụ

lớp Sinh viên(Người)
def __init__(bản thân, fname, lname)
siêu(). __init__(tên, tên)

Tự mình thử »

Bằng cách sử dụng hàm lastname1, bạn không cần phải sử dụng tên của phần tử cha, nó sẽ tự động kế thừa các phương thức và thuộc tính từ cha của nó


Thêm thuộc tính

Ví dụ

Thêm một thuộc tính có tên là lastname3 vào lớp Student

lớp Sinh viên(Người)
def __init__(bản thân, fname, lname)
siêu(). __init__(tên, tên)
bản thân. năm tốt nghiệp = 2019

Tự mình thử »

Trong ví dụ dưới đây, năm lastname5 phải là một biến và được chuyển vào lớp Student khi tạo các đối tượng sinh viên. Để làm như vậy, hãy thêm một tham số khác vào hàm __init__()

Ví dụ

Thêm tham số lastname7 và chuyển đúng năm khi tạo đối tượng

lớp Sinh viên(Người)
def __init__(bản thân, fname, lname, năm)
siêu(). __init__(tên, tên)
bản thân. năm tốt nghiệp = năm

x = Sinh viên("Mike", "Olsen", 2019)

Tự mình thử »


Thêm phương pháp

Ví dụ

Thêm một phương thức có tên là lastname8 vào lớp Student

lớp Sinh viên(Người)
def __init__(bản thân, fname, lname, năm)
siêu(). __init__(tên, tên)
bản thân. năm tốt nghiệp = năm

chắc chắn chào mừng (bản thân)
print("Chào mừng", tự. tên, bản thân. họ, "đến lớp", tự. năm tốt nghiệp)

Tự mình thử »

Nếu bạn thêm một phương thức trong lớp con trùng tên với một hàm trong lớp cha, thì tính kế thừa của phương thức cha sẽ bị ghi đè


Kiểm tra bản thân với các bài tập

Bài tập

Cú pháp chính xác để tạo một lớp có tên là Sinh viên sẽ kế thừa các thuộc tính và phương thức từ một lớp có tên là Người?

Chúng ta có thể mở rộng bất kỳ lớp nào không?

Ghi chú. Một lớp có thể mở rộng một lớp và có thể triển khai đồng thời bất kỳ số lượng giao diện nào.

Một đối tượng có thể mở rộng một lớp không?

Mỗi lớp chỉ có thể mở rộng một lớp, nhưng bản thân lớp này có thể mở rộng Đối tượng (hoặc thứ gì đó mở rộng Đối tượng). Do đó, mọi lớp đều mở rộng Đối tượng, ngay cả khi có một số lớp trung gian khác.

Điều gì xảy ra khi bạn mở rộng một lớp?

Khi bạn mở rộng một lớp, bạn có quan hệ cha-con giữa lớp ban đầu và lớp mới, mở rộng lớp này . Lớp con, lớp mở rộng của lớp cha, sẽ có mọi thành viên của lớp cha mà không cần phải khai báo lại chúng.

Mở rộng trong Python là gì?

Phương thức expand() thêm các phần tử danh sách đã chỉ định (hoặc bất kỳ phần tử có thể lặp lại nào) vào cuối danh sách hiện tại .