Lớp con init trong python là gì?

Cùng với các hàm, các lớp là nền tảng của Python và nhiều ngôn ngữ lập trình khác;

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

Chúng ta hãy nứt

Một con trăn phụ cái gì?

Giả sử bạn đã thiết lập một lớp học. Trong bài viết trước của tôi về các lớp học, tôi đã tạo ra thứ mà tôi sẽ gọi là lớp Người “một tầng”. Tức là bạn sử dụng lớp Person để tạo đối tượng 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ó thêm chiều sâu? . Tôi sẽ trở nên thực sự đơn giản ở đây

Phương tiện > Ô tô > Mercedes

Thấy không? . 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 ta tạo bằng cách sử dụng lớp con Car

Không chỉ vậy, chiếc Mercedes mà chúng ta vừa tạo sẽ kế thừa tất cả các thuộc tính và chức năng liên quan đến lớp cha Vehicle và những thuộc tính và chức năng từ lớp Car

Nghĩa là, chiếc Mercedes sẽ được coi là một phương tiện ô tô ở chỗ nó có bốn bánh và một kính chắn gió, trái ngược với một phương tiện xe máy chỉ có hai bánh và một kính chắn gió nhỏ. Cả ô tô và xe máy đều là phương tiện nhưng chỉ là hai loại phương tiện 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 đều đã có một công việc vào một thời điểm nào đó trong đời. Cũng có nhiều khả năng là chúng ta đã đối mặt với những ông chủ và người quản lý tốt và xấu trong suốt quá trình đó

Hãy tưởng tượng nếu bạn muốn, một trò chơi có Boss trong đó. Tôi có thể tưởng tượng mình đang mã hóa một lớp Boss tương tự như dưới đây. Sau đó, tôi sẽ sử dụng mã này để tạo các loại Boss 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 được viết như thế này được tìm thấy trong bài viết Lớp học Python của tôi

Một ông chủ sẽ có một

class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
5, một
class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
6, một
class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
7 và một
class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
8 (nét mặt. )

Bây giờ, hãy bắt đầu làm việc với Boss Subclasses. Những loại Boss nào chúng ta muốn có thể tạo ra?

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

Tôi đã làm gì ở đây? . 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 phân lớp

    class GoodBoss(Boss):
        def __init__(self,
                    name,
                    attitude,
                    behaviour,
                    face):
            super().__init__(name, attitude, behaviour, face)
    
    9. Xem làm thế nào nó có "Boss" giữa các dấu ngoặc? . Đ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 init dunder, 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 định nghĩa 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 tôi có thể thêm bất kỳ thuộc tính độc đáo nào của 'Boss tốt' mà chúng tôi muốn, chẳng hạn như thuộc tính "cười" (ô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ỳ thứ gì, do đó, thuộc tính cuối cùng mà bạn nhìn thấy là
    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 sẽ làm phiền bạn khi cố gắng giải thích super() trong một gạch đầu dòng 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ủ đề Stack Overflow này thật tuyệt vời cũng như bài viết Programiz này

Phù. Được chứ. Tiếp theo, chúng ta có thể định nghĩa một số hàm 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

________số 8_______

Một ông chủ tốt làm gì? . Họ cũng khuyến khích các nhóm của họ giữ cho họ có động lực

Hai hàm lớp này chỉ cần in ra thông báo đã chỉ định khi được gọi. Nếu đây là một trò chơi, thay vì chỉ in, chúng ta có thể yêu cầu 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 lên 20 điểm hoặc điều gì đó tương tự

Theo cách tương tự, chúng ta có thể định nghĩa một phân lớp

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ã phân lớp
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 kho lưu trữ mã của chúng tôi 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ủ tồi. (Xin lỗi anh trai. )
Cách dễ nhất để kiểm tra điều này là nhập mã vào trình bao tương tác

Tôi có một tệp tên là

from boss_class import Boss, GoodBoss, BadBoss
4. Tôi đang khởi tạo trình bao python từ cùng một thư mục chứa tập lệnh

from boss_class import Boss, GoodBoss, BadBoss

Sau khi được nhập, chúng ta có thể tạo một “tiêu chuẩn”

class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
4, một
class GoodBoss(Boss):
    def __init__(self,
                name,
                attitude,
                behaviour,
                face):
        super().__init__(name, attitude, behaviour, face)
9 hoặc một
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 cái tốt

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

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

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ó ảnh hưởng đến mọi người. Ngoài ra, đây là sự kế thừa trong hành động. Chúng ta “kế thừa” hàm

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. tuyệt vời

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

Tôi biết chúng ta đang trên đà phát triển nhưng Sếp Xấu luôn có cách phá hỏng 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.

từ chối trách nhiệm. Tôi yêu Bob (tất cả chúng ta đều biết anh ấy là người tuyệt vời 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 mình

Phần kết luận

Các lớp, lớp con và kế thừa tuyệt vời như thế nào?

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

Khi bạn hiểu rõ về chúng, các lớp học thực sự khá dễ sử dụng. Chúng là một loạt các mẫu/bản thiết kế đã thiết lập và quên để bạn có thể gọi bất cứ lúc nào. Ôi khả năng… Yum

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

__ Init_subclass __ trong Python là gì?

Phương thức lớp __init_subclass__ được gọi khi chính lớp đó đang được xây dựng . Nó được thông qua cls và có thể sửa đổi nó. Đây là mẫu tôi đã sử dụng. lớp AsyncInject. def __init_subclass__(cls, **kwargs). siêu().

Lớp con trong Python là gì?

Đó là khả năng của một lớp kế thừa hoặc kế thừa các thuộc tính từ một số lớp khác . Nó cũng cung cấp khả năng sử dụng lại mã. Chúng ta không phải viết đi viết lại cùng một mã. Ngoài ra, nó cho phép chúng tôi thêm nhiều tính năng hơn vào một lớp mà không cần sửa đổi nó.

Siêu __ init __ trong Python là gì?

Khi bạn khởi tạo một lớp con trong Python, bạn có thể gọi phương thức super(). phương thức __init__(). Điều này khởi tạo đối tượng lớp cha thành lớp con . Ngoài ra, bạn cũng có thể thêm thông tin dành riêng cho trẻ em vào đối tượng trẻ em.

__ mới __ trong Python là gì?

Theo tài liệu chính thức của Python, __new__ được dùng khi bạn cần kiểm soát việc tạo phiên bản mới trong khi __init__ được dùng để kiểm soát .