Hướng dẫn how do you define a subclass python? - làm thế nào để bạn xác định một lớp con python?

Đây là một bài viết về các lớp con Python và kế thừa. Trước khi đọc tiếp, nếu bạn đã thực hiện như vậy, tôi thực sự khuyên bạn nên xem bài viết của tôi trên các lớp Python.

Chúng ta hãy nứt!

Một phụ con python là gì?

Hãy nói rằng bạn có một lớp học đã được thiết lập. Trong bài viết trước của tôi về các lớp học, tôi đã tạo ra những gì tôi sẽ đề cập đến như một lớp người cấp một tầng của người Viking. Đó là, bạn sử dụng lớp Person để tạo đối tượng một người. Đó là nó. (Tôi đã tạo Bob bằng lớp này. Muahaha!).

Điều gì sẽ xảy ra nếu tôi muốn có một số chiều sâu hơn mặc dù? Hãy để sử dụng phương tiện làm ví dụ. Tôi sẽ nhận được thực sự đơn giản ở đây.

Xe> Xe> Mercedes.

Thấy điều đó? Bây giờ chúng ta nói chuyện! Nhiều cấp độ! Vehicle sẽ là lớp cha, Car sẽ là lớp con và

class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
0 sẽ là một đối tượng chúng tôi tạo bằng lớp con Car.Subclass and
class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
0 would be an object we create using the Car subclass.

Không chỉ vậy, mà Mercedes chúng tôi vừa tạo sẽ kế thừa tất cả các thuộc tính và hàm được liên kết với lớp cha Vehicle và các thuộc tính từ lớp Car.

Đó là, Mercedes sẽ được coi là một chiếc xe ô tô ở chỗ nó có bốn bánh xe và kính chắn gió trái ngược với một chiếc xe máy chỉ có hai bánh xe và kính chắn gió nhỏ. Cả xe và xe máy đều là phương tiện nhưng chỉ có hai loại xe khác nhau. Hiểu rồi?

Một ví dụ quen thuộc

Mã đầy đủ ở đây.

Để chứng minh điều này trong mã, tôi đã viết một lớp

class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
4. Hãy để đối mặt với nó, tất cả chúng ta đã có một công việc tại một số điểm trong cuộc sống của chúng ta. Nó cũng có nhiều khả năng là chúng tôi đã đối phó với các ông chủ và người quản lý tốt và xấu trên đường đi.

Hãy tưởng tượng nếu bạn muốn, một trò chơi với một ông chủ trong đó. Tôi có thể tưởng tượng mình mã hóa một lớp Boss tương tự như bên dưới. Sau đó, tôi đã sử dụng mã này để tạo các loại ông chủ khác nhau:

class Boss(object):
    def __init__(self, name, attitude, behaviour, face):
        self.name = name
        self.attitude = attitude
        self.behaviour = behaviour
        self.face = face

    def get_attitude(self):
        return self.attitude

    def get_behaviour(self):
        return self.behaviour

    def get_face(self):
        return self.face

Một lời giải thích đầy đủ về một lớp học được viết như thế này được tìm thấy trong bài viết của các lớp Python của tôi.

Một ông chủ sẽ có

class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
5,
class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
6,
class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
7 và
class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
8 (Biểu cảm khuôn mặt!).

Bây giờ, hãy để bắt đầu làm việc trên các lớp con trùm. Những loại ông chủ nào chúng ta muốn có thể thực hiện? Làm thế nào về một

class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
9 và
def nurture_talent(self):
    #A good boss nurtures talent making employees happy!
    print("The employees feel all warm and fuzzy then put their talents to good use.")

def encourage(self):
    #A good boss encourages their employees!
    print("The team cheers, starts shouting awesome slogans then gets back to work.")
0?

class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)

Tôi đã làm gì ở đây? Nó rất giống với mã hóa lớp cha. Lưu ý sự khác biệt mặc dù:

  1. Chúng tôi bắt đầu bằng cách xác định lớp con

    class GoodBoss(Boss):
        def __init__(self,
                    name,
                    attitude,
                    behaviour,
                    face):
            super().__init__(name, attitude, behaviour, face)
    
    9. Hãy xem làm thế nào mà nó có được Boss Boss giữa các dấu ngoặc? Đó là vì chúng tôi xác định một đối tượng
    class GoodBoss(Boss):
        def __init__(self,
                    name,
                    attitude,
                    behaviour,
                    face):
            super().__init__(name, attitude, behaviour, face)
    
    9,
    class GoodBoss(Boss):
        def __init__(self,
                    name,
                    attitude,
                    behaviour,
                    face):
            super().__init__(name, attitude, behaviour, face)
    
    4. Điều này sẽ đảm bảo lớp
    class GoodBoss(Boss):
        def __init__(self,
                    name,
                    attitude,
                    behaviour,
                    face):
            super().__init__(name, attitude, behaviour, face)
    
    9 kế thừa mọi thứ từ lớp
    class GoodBoss(Boss):
        def __init__(self,
                    name,
                    attitude,
                    behaviour,
                    face):
            super().__init__(name, attitude, behaviour, face)
    
    4.

  2. Trong phần ban đầu, chúng ta phải chỉ định

    def nurture_talent(self):
        #A good boss nurtures talent making employees happy!
        print("The employees feel all warm and fuzzy then put their talents to good use.")
    
    def encourage(self):
        #A good boss encourages their employees!
        print("The team cheers, starts shouting awesome slogans then gets back to work.")
    
    6 cũng như tất cả các thuộc tính được xác định trong lớp cha mẹ
    class GoodBoss(Boss):
        def __init__(self,
                    name,
                    attitude,
                    behaviour,
                    face):
            super().__init__(name, attitude, behaviour, face)
    
    4. Sau đó, chúng ta có thể thêm bất cứ thứ gì ‘Goodboss, các thuộc tính độc đáo mà chúng ta muốn, chẳng hạn như thuộc tính của một người cười (những ông chủ tốt cười phải không?). Trong trường hợp này, tôi không thêm bất kỳ, do đó, thuộc tính cuối cùng bạn thấy là
    class GoodBoss(Boss):
        def __init__(self,
                    name,
                    attitude,
                    behaviour,
                    face):
            super().__init__(name, attitude, behaviour, face)
    
    8.add whatever ‘GoodBoss’ unique attributes we want, such as a “laugh” attribute (good bosses laugh right?). In this case, I’m not adding any, thus the last attribute you see is
    class GoodBoss(Boss):
        def __init__(self,
                    name,
                    attitude,
                    behaviour,
                    face):
            super().__init__(name, attitude, behaviour, face)
    
    8.

  3. Tuyên bố

    def nurture_talent(self):
        #A good boss nurtures talent making employees happy!
        print("The employees feel all warm and fuzzy then put their talents to good use.")
    
    def encourage(self):
        #A good boss encourages their employees!
        print("The team cheers, starts shouting awesome slogans then gets back to work.")
    
    9 có lẽ là khó hiểu nhất. Nó liên quan đến sự kế thừa từ lớp cơ sở.

Tôi đã làm cho bạn một sự bất đồng khi cố gắng giải thích Super () trong một điểm đạn vì vậy tôi sẽ hướng dẫn bạn đến nơi tôi đọc về nó. Câu trả lời thứ 3 trong chủ đề Overflow Stack này là tuyệt vời như bài viết của chương trình này.

Phew! Được chứ. Tiếp theo, chúng ta có thể xác định một số chức năng lớp cụ thể của Goodboss. Chúng chỉ có thể được sử dụng bởi một đối tượng được tạo bằng lớp

class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
9:

def nurture_talent(self):
    #A good boss nurtures talent making employees happy!
    print("The employees feel all warm and fuzzy then put their talents to good use.")

def encourage(self):
    #A good boss encourages their employees!
    print("The team cheers, starts shouting awesome slogans then gets back to work.")

Một ông chủ tốt làm gì? Anh ấy/cô ấy nuôi dưỡng tài năng để giúp nhân viên phát triển! Họ cũng khuyến khích các đội của họ giữ cho họ có động lực!

Hai chức năng lớp này chỉ đơn giản là in ra thông báo được chỉ định khi được gọi. Nếu đây là một trò chơi, thay vì chỉ in, chúng ta có thể có các chức năng này thực hiện các giao dịch như tăng

from boss_class import Boss, GoodBoss, BadBoss
1 thêm 20 điểm, hoặc một cái gì đó tương tự.

Theo cách tương tự, chúng ta có thể xác định một lớp con

def nurture_talent(self):
    #A good boss nurtures talent making employees happy!
    print("The employees feel all warm and fuzzy then put their talents to good use.")

def encourage(self):
    #A good boss encourages their employees!
    print("The team cheers, starts shouting awesome slogans then gets back to work.")
0. Bạn có thể tìm thấy mã lớp con
def nurture_talent(self):
    #A good boss nurtures talent making employees happy!
    print("The employees feel all warm and fuzzy then put their talents to good use.")

def encourage(self):
    #A good boss encourages their employees!
    print("The team cheers, starts shouting awesome slogans then gets back to work.")
0 trong repo mã của chúng tôi ở đây.

Ai là ông chủ ?!

Thời gian cho một số niềm vui! Tôi sẽ là ông chủ tốt, Bob có thể là ông chủ xấu. (Xin lỗi anh trai!). Cách dễ nhất để kiểm tra điều này là nhập mã vào vỏ tương tác.
The easiest way to test this out is to import the code into the interactive shell.

Tôi đã có một tập tin gọi là

from boss_class import Boss, GoodBoss, BadBoss
4. Tôi đã bắt đầu vỏ Python từ cùng một thư mục mà kịch bản sống.

from boss_class import Boss, GoodBoss, BadBoss

Sau khi được nhập, chúng tôi có thể tạo một tiêu chuẩn của người Viking

class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
4,
class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
9 hoặc
def nurture_talent(self):
    #A good boss nurtures talent making employees happy!
    print("The employees feel all warm and fuzzy then put their talents to good use.")

def encourage(self):
    #A good boss encourages their employees!
    print("The team cheers, starts shouting awesome slogans then gets back to work.")
0. Hãy để bắt đầu với người tốt!

julian = GoodBoss("Julian", "Positive", "Sociable", "Smiling")

Sau đó, chúng ta có thể sử dụng các chức năng lớp được liên kết với cả lớp

class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
4 và lớp con
class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
9:

julian.attitude
‘Positive’

julian.get_behaviour()
‘Sociable’

julian.nurture_talent()
The employees feel all warm and fuzzy then put their talents to good use.

Tôi ước tôi thực sự có tác dụng đó đối với mọi người! Ngoài ra, đây là kế thừa trong hành động! Chúng tôi đã thừa hưởng chức năng

julian = GoodBoss("Julian", "Positive", "Sociable", "Smiling")
0 từ lớp
class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
4! Woohoo!

Kết thúc ở mức thấp

Tôi biết chúng tôi đã có một cuộn nhưng những ông chủ xấu luôn có cách hủy hoại mọi thứ:

bob = BadBoss("Bob", “Crazy”, "Anti-Social", "Scowl of Hate")

bob.face
'Scowl of Hate'

bob.get_attitude()
‘Crazy’

bob.hoard_praise()
The employees feel cheated and start plotting Bob's demise while he stares at his own reflection.

bob.yell()
Everyone stares while Bob yells. Someone shouts, 'Won't somebody PLEASE think of the children?!’
Bob storms off, everyone comforts the victim and one person offers to arrange an 'accident' for Bob.

Tuyên bố miễn trừ trách nhiệm: Tôi yêu Bob (tất cả chúng ta đều biết anh ấy là điều tốt nhất kể từ khi cắt lát bánh mì!). Tôi cũng yêu các lớp phủ AWS của tôi.

Sự kết luận

Làm thế nào tuyệt vời là các lớp học, lớp con và kế thừa ?!

Điều này không chỉ giúp tôi lên kế hoạch tốt hơn với mã của mình mà còn cho phép tôi đánh giá cao hơn mã khác. Tôi chỉ có thể tưởng tượng có bao nhiêu lớp học và các lớp con tồn tại trong các trò chơi video (ví dụ thế giới của Warcraft!).

Một khi bạn hiểu được chúng, các lớp học thực sự khá dễ sử dụng. Họ là một loạt các mẫu và quên các mẫu/bản thiết kế để bạn gọi bất cứ lúc nào. Ôi những khả năng của bạn Yum!

Oh và nói về các mẫu. Tôi đã tạo một mẫu khung/lớp trống và mẫu phân lớp cho ngày 77 trong số 100 ngày thử thách mã của chúng tôi. Kiểm tra nó ở đây!

Giữ bình tĩnh và mã trong Python!

- Julian

(PSST! Có ai nhận được tài liệu tham khảo Simpsons không?)

Làm thế nào để bạn xác định các lớp con?

Định nghĩa: Một lớp con là một lớp xuất phát từ một lớp khác.Một lớp con kế thừa trạng thái và hành vi từ tất cả các tổ tiên của nó.Thuật ngữ siêu lớp đề cập đến tổ tiên trực tiếp của một lớp cũng như tất cả các lớp lên ngôi của nó.a class that derives from another class. A subclass inherits state and behavior from all of its ancestors. The term superclass refers to a class's direct ancestor as well as all of its ascendant classes.

Làm thế nào để bạn tạo một lớp con?

Tạo một lớp con có thể đơn giản như bao gồm mệnh đề mở rộng trong khai báo lớp của bạn (chẳng hạn như trong Tuyên bố trong ImaginaryNumber ở trên).Tuy nhiên, bạn thường phải thực hiện các điều khoản khác trong mã của mình khi phân lớp một lớp, chẳng hạn như các phương thức ghi đè.including the extends clause in your class declaration (such as in the declaration in ImaginaryNumber above). However, you usually have to make other provisions in your code when subclassing a class, such as overriding methods.

Làm thế nào để bạn xác định một lớp con từ một con trăn siêu lớp?

Bạn sử dụng: Lớp DeriveSclassName (BaseclassName):class DerivedClassName(BaseClassName):

Một lớp con với ví dụ là gì?

Một lớp con là một lớp có nguồn gốc từ siêu lớp.Nó kế thừa các thuộc tính của siêu lớp và cũng chứa các thuộc tính của riêng nó.Một ví dụ là: xe hơi, xe tải và xe máy đều là những lớp con của chiếc xe siêu lớp.a class derived from the superclass. It inherits the properties of the superclass and also contains attributes of its own. An example is: Car, Truck and Motorcycle are all subclasses of the superclass Vehicle.