Lớp sinh viên trong python

Trang web này được hỗ trợ rộng rãi bởi DataCamp. DataCamp cung cấp Hướng dẫn Python tương tác trực tuyến cho Khoa học dữ liệu. Tham gia cùng 575.000 người học khác và bắt đầu học Python cho khoa học dữ liệu ngay hôm nay

Chào mừng đến với LearnPython. hướng dẫn Python tương tác org

Cho dù bạn có phải là một lập trình viên có kinh nghiệm hay không, trang web này dành cho tất cả những ai muốn học ngôn ngữ lập trình Python

Bạn được hoan nghênh tham gia nhóm của chúng tôi trên Facebook để đặt câu hỏi, thảo luận và cập nhật

Sau khi bạn hoàn thành các hướng dẫn, bạn có thể được chứng nhận tại LearnX và thêm chứng nhận của bạn vào hồ sơ LinkedIn của bạn

Các ví dụ trên là các lớp và đối tượng ở dạng đơn giản nhất và không thực sự hữu ích trong các ứng dụng thực tế

Để hiểu ý nghĩa của các lớp, chúng ta phải hiểu hàm __init__[] tích hợp sẵn

Tất cả các lớp đều có một hàm gọi là __init__[], hàm này luôn được thực thi khi lớp bắt đầu

Sử dụng hàm __init__[] để gán giá trị cho thuộc tính đối tượng hoặc các thao tác khác cần thực hiện khi đối tượng được tạo

Thí dụ

Tạo một lớp tên là Person, sử dụng hàm __init__[] để gán giá trị cho tên và tuổi

lớp Người.
  def __init__[bản thân, tên, tuổi].
    bản thân. tên = tên
    bản thân. tuổi = tuổi

p1 = Người["John", 36]

in[p1. tên]
in[p1. tuổi]

Tự mình thử »

Ghi chú. Hàm

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
3 được gọi tự động mỗi khi lớp được sử dụng để tạo một đối tượng mới

Hàm __str__[]

Hàm __str__[] kiểm soát những gì sẽ được trả về khi đối tượng lớp được biểu diễn dưới dạng chuỗi

Nếu hàm __str__[] không được đặt, thì biểu diễn chuỗi của đối tượng được trả về

Thí dụ

Biểu diễn chuỗi của một đối tượng KHÔNG CÓ hàm __str__[]

lớp Người.
  def __init__[bản thân, tên, tuổi].
    bản thân. tên = tên
    bản thân. tuổi = tuổi

p1 = Người["John", 36]

bản in[p1]

Tự mình thử »

Thí dụ

Biểu diễn chuỗi của một đối tượng VỚI hàm __str__[]

lớp Người.
  def __init__[bản thân, tên, tuổi].
    bản thân. tên = tên
    bản thân. tuổi = tuổi

  def __str__[self].
    return f"{self. tên}[{bản thân. tuổi}]"

p1 = Người["John", 36]

bản in[p1]

Tự mình thử »

phương pháp đối tượng

Các đối tượng cũng có thể chứa các phương thức. Các phương thức trong các đối tượng là các chức năng thuộc về đối tượng

Hãy để chúng tôi tạo một phương thức trong lớp Person

Thí dụ

Chèn một hàm in lời chào và thực hiện nó trên đối tượng p1

lớp Người.
  def __init__[bản thân, tên, tuổi].
    bản thân. tên = tên
    bản thân. tuổi = tuổi

  def myfunc[self].
    print["Xin chào tôi tên là " + tự. tên]

p1 = Person["John", 36]
p1. myfunc[]

Tự mình thử »

Ghi chú. Tham số

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
4 là tham chiếu đến phiên bản hiện tại của lớp và được sử dụng để truy cập các biến thuộc về lớp

Tham số bản thân

Tham số

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
4 là tham chiếu đến phiên bản hiện tại của lớp và được sử dụng để truy cập các biến thuộc về lớp

Nó không nhất thiết phải được đặt tên là

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
4 , bạn có thể gọi nó là gì tùy thích, nhưng nó phải là tham số đầu tiên của bất kỳ chức năng nào trong lớp

Thí dụ

Sử dụng các từ mysillyobject và abc thay vì self

lớp Người.
  def __init__[mysillyobject, name, age].
    mysillyobject. name = name
    mysillyobject. tuổi = tuổi

  def myfunc[abc].
    print["Xin chào, tên tôi là " + abc. tên]

p1 = Person["John", 36]
p1. myfunc[]

Tự mình thử »

Sửa đổi thuộc tính đối tượng

Bạn có thể sửa đổi các thuộc tính trên các đối tượng như thế này

Xóa thuộc tính đối tượng

Bạn có thể xóa các thuộc tính trên các đối tượng bằng cách sử dụng từ khóa

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
7

Xóa đối tượng

Bạn có thể xóa các đối tượng bằng cách sử dụng từ khóa

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
7

Tuyên bố vượt qua

Định nghĩa

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
9 không thể để trống, nhưng nếu vì lý do nào đó bạn có định nghĩa
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
9 không có nội dung, hãy đặt câu lệnh
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
1 để tránh bị lỗi

Kế thừa là một trong những nguyên lý cơ bản của hướng đối tượng lập trình. Kế thừa là cơ chế tái sử dụng mã mà tất cả các ngôn ngữ lập trình hướng đối tượng đều thực thi

Python cũng hỗ trợ kế thừa. Cơ chế thực hiện kế thừa trong Python có điểm khác so với một số ngôn ngữ khác

ĐỘI DUNG CỦA BẢN DỊCH Ẩn

1. Ví dụ về kế thừa trong Python

2. Kế thừa trong Python

3. Ghi đè trong Python

4. Xáo trộn tên và kế thừa

5. Kế thừa và đa hình trong Python

6. Kết luận

Ví dụ về kế thừa trong Python

Kế thừa [kế thừa] là một công cụ rất mạnh trong việc lập trình hướng đối tượng cho phép tạo ra các lớp mới từ một lớp có sẵn. Qua đó có thể tái sử dụng mã của lớp đã có. Kế hoạch thừa giúp giảm thiểu việc lặp lại mã giữa các lớp

Hãy cùng thực hiện ví dụ sau đây

class Person:
    count = 0
    def __init__[self, fname='', lname='', age=18]:
        self.fname = fname
        self.lname = lname
        self.age = age
        Person.count += 1
    def print[self]:
        print[f'{self.fname} {self.lname} [{self.age} years old]']
    @property
    def full_name[self]:
        return f'{self.fname} {self.lname}'
    @classmethod
    def print_count[cls]:
        print[f'{cls.count} objects created']
    @staticmethod
    def birth_year[age: int] -> int:
        from datetime import datetime as dt
        year = dt.now[].year
        return year - age

class Student[Person]:
    def __init__[self, fname='', lname='', age=18, group='', specialization='']:
        super[].__init__[fname, lname, age]
        self.group = group
        self.specialization = specialization
    def print[self]:
        super[].print[]
        print[f'Group {self.group}/{self.specialization}']
    @property
    def academic_info[self]:
        return f'Group {self.group}, Specialization of {self.specialization}'

if __name__ == '__main__':
    trump = Student['Donald', 'Trump', 22, '051311', 'Computer science']
    trump.print[]
    print[trump.full_name]
    print[Student.count]
    Student.print_count[]
    print[Student.birth_year[37]]
    print[trump.academic_info]

Kết quả chạy chương trình như sau

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science

Trong ví dụ trên chúng tôi đã xây dựng hai lớp. Người và Sinh viên

Trong class Person, chúng ta tạo các thuộc tính thể hiện [

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
2,
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
3,
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
0] trong hàm tạo, một thuộc tính lớp [
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
1], một phương thức lớp [
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
2], một phương thức tĩnh [
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
3] và một thuộc tính [
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
4]

Chúng ta xây dựng lớp thứ hai Student kế thừa từ Person. Lưu ý rằng trong Lớp Student chúng ta chỉ định nghĩa hàm tạo và phương thức print[]

Trump variable được tạo ra từ lớp Student. Tuy nhiên, khi sử dụng biến trump, chúng ta sẽ truy xuất lại truy xuất tới các thành viên của Layer Peson

Chúng ta gọi quan hệ giữa Student và Person là quan hệ kế thừa. Trong đó, Sinh viên kế thừa Người, hoặc Người sinh ra Sinh viên. Lớp Người gọi là lớp cha hoặc lớp cơ sở. Lớp sinh viên gọi là lớp con hoặc lớp dẫn xuất

Kế thừa trong Python

Cú pháp kế thừa kế thừa trong Python as after.

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
5. Như trong ví dụ ở phần trên, để khai báo Lớp Sinh viên kế thừa Lớp Người, chúng ta viết phần tiêu đề như sau.
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
6

Trong Python, lớp con kế thừa tất cả mọi thứ từ lớp cha. “Kế thừa” ở đây cần hiểu là tất cả những gì được định nghĩa ở lớp cha sẽ đều có thể sử dụng thông qua tên lớp con hoặc thông qua đối tượng của lớp con

Trong ví dụ trên, ở lớp cha chúng ta xây dựng đầy đủ những thành phần thường gặp ở lớp Python. hàm tạo [

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
7], thuộc tính thể hiện [
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
2,
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
3,
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
0], thuộc tính lớp [
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
1], thuộc tính [
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
4], phương thức lớp [
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
2], phương thức tĩnh [
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
3]

Bạn có thể sử dụng tất cả các thành phần trên của Người qua đối tượng của Sinh viên hoặc qua lớp chính Sinh viên

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
5

Python cho phép một lớp con kế thừa nhiều lớp cha cùng lúc. Hiện tượng này được gọi là đa kế thừa [đa kế thừa]

Kế thừa cũng được hỗ trợ trong một số ngôn ngữ như C++. Tuy nhiên, nhìn chung người ta không khuyến khích sử dụng đa kế thừa vì nó có thể dẫn đến những kết quả khó dự đoán. Vì vậy, các ngôn ngữ như C# hay Java không hỗ trợ đa kế thừa

Mọi lớp trong Python đều kế thừa từ một lớp “tổ tông” chung – lớp

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
55. Tuy nhiên, khi xây dựng lớp mới, bạn không cần chỉ định đối tượng lớp cha. Python sẽ làm công việc này một cách tự động

Ghi đè trong Python

Lớp con khi kế thừa từ lớp cha sẽ có tất cả những gì định nghĩa trong lớp cha. Tuy nhiên, đôi khi những gì định nghĩa trong lớp lại không hoàn toàn phù hợp với lớp con

Ví dụ, trong lớp Người ở ví dụ trên có định nghĩa về phương thức

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
56. Lớp Sinh viên kế thừa Người cũng sẽ kế thừa
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
56. Tuy nhiên,
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
56 of Person only in ra các thông tin riêng của Person, bao gồm fname, lname và age. Trong khi đó Sinh viên tự định nghĩa thêm hai nhóm thuộc tính và chuyên ngành. Nghĩa là
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
56 mà Sinh viên kế thừa từ Người không hoàn toàn phù hợp

Từ những vấn đề tương tự dẫn đến nhu cầu viết lại một phương thức vốn đã được định nghĩa sẵn ở lớp cha. Hoặc cũng có thể đạt được theo cách khác. định nghĩa một phương thức mới trong lớp con có cùng tên và tham số với phương thức được kế thừa từ lớp cha [dĩ nhiên, các phần thân khác nhau]. Trong kế thừa, hiện tượng này được gọi là ghi đè phương thức [ghi đè phương thức]

Trong ví dụ của chúng ta, lớp con Học sinh ghi đè phương thức print[] của lớp cha Người. Trong lớp con Học sinh định nghĩa một phương thức print[] có cùng tiêu đề như phương thức print[] của Người nhưng với các phần khác biệt.

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
1

Khi gặp lệnh gọi print[] từ một đối tượng của Student, Python sẽ gọi phương thức print[] mới của Student

Python sử dụng cơ chế gọi là Method Resolution Order [MRO] để xác định xem cần phải thực hiện bất kỳ phương thức nào trong kế thừa

To idea in method print[] new has call

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
10. Đây là cách Python cho phép gọi hàm print[] cũ của Person. Ở đây chúng ta tận dụng hàm print[] của Layer Person để ra các thông tin vốn có sẵn ở Layer Person. Sau đó trong phần bổ sung những thông tin riêng của Student

Một vấn đề ghi đè thường gặp khác liên quan đến hàm tạo

Do hàm tạo __init__ được lớp con thừa kế, nếu bạn không có nhu cầu định nghĩa thêm thuộc tính riêng cho lớp con, thì bạn thậm chí không cần phải xây dựng hàm tạo ở lớp con nữa. Python tự động gọi hàm tạo của lớp cha khi tạo đối tượng của lớp con

Tuy nhiên, thông thường lớp con thông thường định nghĩa thêm thuộc tính của riêng mình. Do vậy, trong lớp con cũng thường định nghĩa hàm tạo của riêng mình. Các đối tượng này được gọi là ghi đè hàm tạo [ghi đè hàm tạo]

Khi ghi đè hàm tạo, bạn sẽ có yêu cầu gọi tới hàm tạo của lớp cha trước khi thêm thuộc tính riêng của lớp con. Chính xác hơn, khi ghi đè hàm tạo, bạn bắt buộc phải gọi hàm tạo của lớp cha trong hàm tạo của lớp con thông qua phương thức

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
11

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
4

Hàm super[] trả về một đối tượng proxy – một đối tượng tạm thời của lớp cha – giúp truy xuất phương thức của lớp cha từ lớp con. Hàm super[] giúp tránh sử dụng trực tiếp tên lớp cha và làm việc với đa kế thừa

Khi gặp hàm tạo ghi đè ở lớp con, Python sẽ không tự động gọi hàm tạo của lớp cha nữa mà sẽ chỉ gọi hàm tạo của lớp con. Nếu bạn không gọi hàm tạo của lớp cha trong hàm tạo mới của lớp con, Python sẽ không thể tạo các thuộc tính cần thiết cho lớp cha và sẽ dẫn đến lỗi

Mangling name và kế thừa

Trên thực tế không phải tất cả các biệt thự trong lớp cha đều là lớp con kế thừa. Nếu bạn sử dụng tên xáo trộn, các thành viên riêng tư [trong tên gọi có hai dấu gạch chân] sẽ không được kế thừa

Name mangling là cơ chế của Python để mô phỏng việc kiểm soát việc truy cập các thành viên của lớp. Python quy ước.
[1] nếu thành viên cần giới hạn truy cập trong phạm vi lớp thì tên gọi cần bắt đầu bằng hai dấu gạch chân. Ví dụ

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
12.
[2] nếu thành viên cần truy cập giới hạn trong phạm vi của lớp hoặc trong lớp con thì tên gọi cần bắt đầu bằng một dấu gạch chân. Ví dụ
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
13.

Python hoặc IDE sẽ sinh ra lỗi hoặc cảnh báo nếu khi sử dụng thuộc tính bạn vi phạm các quy ước trên

Để thử nghiệm, hãy bổ sung thêm hai thuộc tính sau vào hàm tạo của Person

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
7

Giờ hãy thử trải nghiệm các lệnh gọi sau

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
8

Trong command group 3 on, command thứ 3 sẽ gây ra lỗi.

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
14. Nghĩa là thuộc tính __private không được Student kế thừa

Trong khi đó truy xuất

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
15 không gây lỗi. Nghĩa là
Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
13 được sinh viên kế thừa

Lưu ý, truy xuất _protected as on sẽ là IDE giống như PyCharm cảnh báo ‘Truy cập thành viên được bảo vệ của một lớp‘. Bạn không nên truy xuất thuộc tính được bảo vệ bên ngoài lớp cha hoặc bên ngoài lớp con

Như vậy tên mangling có khả năng kiểm tra truy cập trong kế thừa

Kế thừa và đa hình trong Python

Hãy cùng thực hiện ví dụ sau

Donald Trump [22 years old]
Group 051311/Computer science
Donald Trump
1
1 objects created
1983
Group 051311, Specialization of Computer science
2

Trong ví dụ này chúng ta xây dựng 3 lớp Person, Student, Teacher. Trong đó Sinh viên kế thừa Người. Cả 3 class này đều có phương thức hiển thị[self]

Please for the method show_info[p]. Bạn không cần quan tâm p có kiểu gì, chỉ cần p chứa phương thức display[] là có thể sử dụng được trong show_info[]

call p. display[] như vậy liên quan đến cơ chế đa hình [đa hình]

In set the direction object, next inherit and multifigure is hai nguyên lý khác nhau

Đa hình thiết lập mối quan hệ là [tiếng Anh gọi là is-a] giữa kiểu cơ sở và kiểu dẫn xuất. Ví dụ, nếu chúng ta có lớp cơ sở Người và lớp dẫn xuất Sinh viên thì một đối tượng của Sinh viên cũng là đối tượng của Người, kiểu Sinh viên cũng là kiểu Người. Nói theo ngôn ngữ thông thường thì sinh viên cũng là người. Một anh sinh viên chắc chắn là một người

Trong khi đó, kế thừa liên quan đến tái sử dụng mã. Lớp con thừa hưởng mã của lớp cha

Nói cách khác, đa hình liên quan tới quan hệ về ngữ nghĩa, còn kế thừa liên quan tới cú pháp

Trong các ngôn ngữ như C++, C#, Java, hai khái niệm này hầu như được đồng nhất, có thể hiện tại chỗ

  1. lớp con thừa hưởng các thành viên của lớp cha [kế thừa, tái sử dụng mã];
  2. một đối tượng thuộc kiểu con có thể gán cho biến thuộc kiểu cha, tức là kiểu cơ sở có thể sử dụng để thay thế cho kiểu dẫn đầu ra [đa hình];
  3. một phương thức xử lý đối tượng kiểu cha thì sẽ xử lý đối tượng kiểu con

Tổ hợp kế thừa + đa hình cho phép các ngôn ngữ lập trình hướng đối tượng xử lý đối tượng ở dạng tổng quát

Trong Python this thing is true. Tuy nhiên, Python but soft dẻo hơn nữa. Python sử dụng nguyên lý có tên gọi là gõ ống dẫn để thực hiện cơ chế đa hình

Nguyên lý con vịt gõ [nguyên lý con vịt]. nếu một con vật nhìn giống con vịt, có thể đi và bơi như con vịt, thì nhất định nó là một con vịt. Như vậy, theo nguyên lý này, con thiên nga nhỏ cũng có thể xem là con vịt

Mặc dù nghe khá buồn cười nhưng nó có thể hiển thị đối tượng dạng nhận dạng đặc điểm của Python. đa hình trong Python đạt được không cần liên quan đến kế thừa. Đa hình trong Python liên quan đến các thành viên của lớp. Nếu hai đối tượng có các thành viên tương tự nhau thì chúng được xem là thuộc cùng một kiểu. Do vậy chúng ta có thể sử dụng trong cùng một hàm/phương thức

Như vậy, theo nguyên lý trên, nếu bạn xây dựng lớp Người, Học sinh, Giáo viên với cùng các thành viên, đối tượng của hai lớp này được xem là tương đồng và có thể truyền cho cùng một phương thức xử lý. Học sinh và giáo viên không cần có bất kỳ quan hệ gì về kế thừa

Chủ Đề