Điều gì đúng về phương thức __ Init__ trong Python?

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

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
5 được gọi tự động mỗi khi lớp được sử dụng để tạo một đối tượng mới

Khi đọc mã Python của người khác, nhiều người mới bắt đầu cảm thấy bối rối với phương pháp

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
6. Mục đích của nó là gì?

__init__ trong Python là gì?

Điều gì đúng về phương thức __ Init__ trong Python?

Xem video này trên YouTube

Mục đích của

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
6 trong Python là gì?

Phương thức Python dành riêng

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
5 được gọi là hàm tạo của một lớp. Bạn có thể gọi phương thức khởi tạo để tạo một đối tượng (= thể hiện) từ một lớp và khởi tạo các thuộc tính của nó

Điều gì đúng về phương thức __ Init__ trong Python?

Mặc dù điều này trả lời câu hỏi, nhưng nếu bạn có bất kỳ tham vọng nào trong việc trở thành một lập trình viên Python chuyên nghiệp, thì việc biết rằng phương thức

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
9 là hàm tạo của một lớp là chưa đủ. Bạn cũng cần biết cách sử dụng hàm tạo trong các dự án của riêng mình—và cách tùy chỉnh các đối số của nó. Sự hiểu biết thấu đáo về hàm tạo đóng vai trò là nền tảng vững chắc cho các khái niệm nâng cao hơn trong lập trình Python hướng đối tượng. Đọc tiếp để tìm hiểu nửa còn lại của phương trình

Ví dụ tương tác. Trước khi tôi giải thích cho bạn, hãy mở lỗ hổng kiến ​​thức của bạn. Xem xét ví dụ sau

Tập thể dục. Thêm một màu đối số vào phương thức

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
9 và làm cho mã chạy không có lỗi

Hãy đi sâu vào ví dụ đơn giản này một cách chi tiết

Làm thế nào để sử dụng phương pháp __init__ trong thực tế?

Chúng tôi sẽ sử dụng một số thuật ngữ lập trình hướng đối tượng trong Python để giải thích ví dụ của chúng tôi. Đảm bảo nghiên cứu bảng cheat sau (bạn cũng có thể tải xuống bản PDF tại đây). Nhấp vào hình ảnh để lấy bảng gian lận (mở trong tab mới). Nếu bạn đã quen thuộc với các thuật ngữ hướng đối tượng cơ bản như lớp và thể hiện, chỉ cần đọc tiếp

Điều gì đúng về phương thức __ Init__ trong Python?

Bạn đã biết rằng phương thức

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
9 là phương thức khởi tạo của một lớp. Bạn gọi phương thức khởi tạo để tạo các thể hiện (hoặc đối tượng) mới. Nhưng chính xác thì điều này diễn ra như thế nào trong thực tế?

Tự luận

Hàm tạo

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
9 yêu cầu ít nhất một đối số. Theo tiêu chuẩn PEP8, nên biểu thị đối số này là
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
3. Trong mọi trường hợp, đối số
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
3 trỏ đến chính phiên bản mới được tạo và nó cho phép bạn thao tác các thuộc tính phiên bản của phiên bản mới. Trong ví dụ về con chó, bạn sẽ sử dụng
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
5 để đặt thuộc tính
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
6 của con chó mới tạo thành chuỗi
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
7

Hãy xem ví dụ mã cơ bản sau đây

class Dog:

    def __init__(self):
        self.color = "blue"


bello = Dog()
print(bello.color)
# blue
  1. Chúng ta tạo một lớp mới Dog với hàm tạo
    class Dog:
    
        def __init__(self, color):
            self.color = color
            
    
    bello = Dog("blue")
    print(bello.color)
    # blue
    
    alice = Dog("brown")
    print(alice.color)
    # brown
    6
  2. Chúng tôi tạo một thể hiện mới của lớp
    class Dog:
    
        def __init__(self, color):
            self.color = color
            
    
    bello = Dog("blue")
    print(bello.color)
    # blue
    
    alice = Dog("brown")
    print(alice.color)
    # brown
    9 có tên là
    class Dog:
        def __init__(self, color):
            self.color = color
            
    
    class CuteDog(Dog):
        def __init__(self, color):
            Dog.__init__(self, color)
            self.hairs = True
    
    
    bello = CuteDog('brown')
    print(bello.hairs)
    # True
    
    print(bello.color)
    # brown
    0. Có hai quan sát thú vị. Đầu tiên, chúng ta sử dụng tên lớp thay vì tên hàm tạo để tạo thể hiện mới. Python gọi nội bộ phương thức __init__ cho chúng tôi. Thứ hai, chúng tôi không vượt qua bất kỳ đối số nào khi gọi
    class Dog:
        def __init__(self, color):
            self.color = color
            
    
    class CuteDog(Dog):
        def __init__(self, color):
            Dog.__init__(self, color)
            self.hairs = True
    
    
    bello = CuteDog('brown')
    print(bello.hairs)
    # True
    
    print(bello.color)
    # brown
    1. Một lần nữa, Python hoàn toàn chuyển một tham chiếu đến thể hiện mới được tạo (
    class Dog:
        def __init__(self, color):
            self.color = color
            
    
    class CuteDog(Dog):
        def __init__(self, color):
            Dog.__init__(self, color)
            self.hairs = True
    
    
    bello = CuteDog('brown')
    print(bello.hairs)
    # True
    
    print(bello.color)
    # brown
    0) cho hàm tạo
    class Dog:
    
        def __init__(self, color):
            self.color = color
            
    
    bello = Dog("blue")
    print(bello.color)
    # blue
    
    alice = Dog("brown")
    print(alice.color)
    # brown
    9
  3. Chúng tôi in thuộc tính màu của phiên bản
    class Dog:
        def __init__(self, color):
            self.color = color
            
    
    class CuteDog(Dog):
        def __init__(self, color):
            Dog.__init__(self, color)
            self.hairs = True
    
    
    bello = CuteDog('brown')
    print(bello.hairs)
    # True
    
    print(bello.color)
    # brown
    0 mới được tạo. Kết quả là giá trị chuỗi
    class Dog:
    
        def __init__(self, color):
            self.color = color
            
    
    bello = Dog("blue")
    print(bello.color)
    # blue
    
    alice = Dog("brown")
    print(alice.color)
    # brown
    7 như được định nghĩa trong hàm tạo

Tuy nhiên, ví dụ tối thiểu này là không thực tế. Một số con chó có màu nâu, những con khác có màu đen và chỉ một số có màu xanh lam

Nhiều đối số hàm tạo

Vậy làm thế nào chúng ta có thể tạo ra những con chó khác nhau với màu sắc khác nhau? . Đây là một ví dụ khác khi chúng tôi tạo hai chú chó có màu sắc khác nhau. Bạn có thể nhận ra màu sắc của chúng?

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown

Ngược lại với ví dụ đầu tiên, bây giờ chúng ta xác định hàm tạo

class Dog:
    def __init__(self, color):
        self.color = color
        

class CuteDog(Dog):
    def __init__(self, color):
        Dog.__init__(self, color)
        self.hairs = True


bello = CuteDog('brown')
print(bello.hairs)
# True

print(bello.color)
# brown
8 với hai đối số thay vì một

Đầu tiên là đối số

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
3 như trước. Đối số thứ hai là đối số tùy chỉnh
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
6 được thông qua bởi người gọi hàm tạo. Trong trường hợp của chúng tôi, chúng tôi tạo hai phiên bản Dog,
class Dog:
    def __init__(self, color):
        self.color = color
        

class CuteDog(Dog):
    def __init__(self, color):
        Dog.__init__(self, color)
        self.hairs = True


bello = CuteDog('brown')
print(bello.hairs)
# True

print(bello.color)
# brown
0 và
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
82, bằng cách chỉ định đối số
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
6 cho cả hai

Lưu ý rằng đối số

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
3 được xử lý hoàn toàn bởi môi trường lập trình Python. Python chỉ cần chuyển một tham chiếu đến thể hiện
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
9 tương ứng tới hàm tạo
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
9

Sự khác biệt giữa Trình xây dựng và Trình khởi tạo là gì?

Chà, tôi đã không sử dụng một thuật ngữ rất chính xác trong các đoạn trước. Tôi đã sử dụng thuật ngữ “hàm tạo” cho cả lệnh gọi

class Dog:
    def __init__(self, color):
        self.color = color
        

class CuteDog(Dog):
    def __init__(self, color):
        Dog.__init__(self, color)
        self.hairs = True


bello = CuteDog('brown')
print(bello.hairs)
# True

print(bello.color)
# brown
1 và lệnh gọi
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
5. Nhưng chỉ cuộc gọi cũ mới có thể được biểu thị là phương thức khởi tạo vì chỉ cuộc gọi này mới thực sự tạo ra một thể hiện mới. Vào thời điểm đó, chúng tôi gọi phương thức
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
9, thể hiện đã được tạo (Python chuyển nó cho chúng tôi thông qua đối số
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
3). Đó là lý do tại sao một thuật ngữ chính xác hơn cho phương thức
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
9 là phương thức khởi tạo. Đó là cách tôi sẽ biểu thị nó ở phần sau để bù đắp cho nó. 😉

Ý nghĩa của dấu gạch dưới trong tên phương thức __init__ là gì?

Tôi đã viết cả một bài về ý nghĩa của dấu gạch dưới trong Python. Hãy xem nếu chủ đề này khiến bạn quan tâm hơn nữa. Tuy nhiên, điểm mấu chốt là như sau

Dấu gạch dưới kép “__” (được gọi là “dunder“) được sử dụng để tạo thuộc tính cá thể hoặc phương thức riêng tư (không thể truy cập từ bên ngoài lớp) — khi được sử dụng làm dấu gạch dưới hàng đầu. Khi được sử dụng như bao vây dunder (e. g. “__init__”) nó chỉ ra rằng đó là một phương thức đặc biệt trong Python (được gọi là “phương thức ma thuật”)

Làm cách nào để sử dụng __init__ trong Lớp kế thừa?

Lớp kế thừa là lớp kế thừa tất cả các thuộc tính và phương thức từ lớp cha. Đây là một ví dụ

class Dog:
    def __init__(self, color):
        self.color = color
        

class CuteDog(Dog):
    def __init__(self, color):
        Dog.__init__(self, color)
        self.hairs = True


bello = CuteDog('brown')
print(bello.hairs)
# True

print(bello.color)
# brown

Tính kế thừa rất quan trọng trong Python. Trong ví dụ, lớp cha là lớp Dog mà bạn đã biết ở trên. Phương thức khởi tạo __init__ xác định màu của con chó này

Bây giờ, chúng ta cũng tạo một lớp mới

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
52 kế thừa tất cả các thuộc tính từ lớp cha
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
9. Bạn có thể định nghĩa tính kế thừa bằng cách chỉ định tên của lớp cha trong dấu ngoặc sau lớp con.
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
54

Điều thú vị là phương thức __init__ của lớp con CuteDog gọi phương thức __init__ của lớp cha. Điều này có ý nghĩa vì lớp con có các thuộc tính giống như lớp cha—và chúng cũng cần được khởi tạo

Tuy nhiên, cách Pythonic hơn là sử dụng hàm

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
55 giúp bạn truy cập lớp cha dễ dàng hơn

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
8

Với sự trợ giúp của hàm

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
55, bạn có thể dễ dàng sử dụng lại phương thức khởi tạo của lớp cha

Hãy xem xét một vài câu hỏi liên quan

__ init __ có cần thiết trong Python không?

Không. Bạn chỉ cần bỏ qua phương thức khởi tạo. Do đó, lớp của bạn sẽ không có bất kỳ thuộc tính thể hiện nào ngay sau khi tạo. Tuy nhiên, bạn có thể tự động thêm các thuộc tính phiên bản vào bất kỳ thời điểm nào trong tương lai. Đây là một ví dụ

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
5

đẹp làm sao. Bạn thậm chí có thể tạo các lớp trống và “điền vào” các phương thức và thuộc tính sau này trong Python

__ init __ Trả về là gì?

Bản thân phương thức

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
9 không trả về gì cả. Về mặt kỹ thuật, Python đầu tiên sử dụng phương thức khởi tạo
class Dog:
    def __init__(self, color):
        self.color = color
        

class CuteDog(Dog):
    def __init__(self, color):
        Dog.__init__(self, color)
        self.hairs = True


bello = CuteDog('brown')
print(bello.hairs)
# True

print(bello.color)
# brown
1 trước khi sử dụng
class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
9 để khởi tạo tất cả các thuộc tính. Do đó, chỉ hàm tạo mới trả về thể hiện mới được tạo

__init__ có thể trả về giá trị không?

Không. Giá trị trả về duy nhất không gây ra lỗi thời gian chạy là

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
30. Tất cả các giá trị trả về khác đều gây ra lỗi. Xem ví dụ mã sau

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
3

Vì vậy, đừng bao giờ sử dụng bất kỳ giá trị trả về nào trong phương thức __init__ và bạn đã sẵn sàng

Đi đâu từ đây?

Cảm ơn đã đọc hết bài viết. Bạn đã biết rằng tên

class Dog:

    def __init__(self, color):
        self.color = color
        

bello = Dog("blue")
print(bello.color)
# blue

alice = Dog("brown")
print(alice.color)
# brown
9 được dành riêng cho phương thức khởi tạo Python được gọi trong hàm tạo

Bài viết yêu cầu nắm vững kiến ​​thức cơ bản về Python. Đầu tư thời gian để tìm hiểu và nghiên cứu những điều đó là rất quan trọng để bạn thành công với tư cách là một lập trình viên chuyên nghiệp

Để giúp mọi người phát triển kỹ năng của họ theo cách tự động, được cá nhân hóa, tôi đã tạo một khóa học Python qua email miễn phí “Coffee Break Python” giúp nâng cao trình độ kỹ năng của bạn một cách dường như vô tận. Ngày này qua ngày khác…

Tham gia cùng hàng chục nghìn lập trình viên Python (miễn phí 100%)

Điều gì đúng về phương thức __ Init__ trong Python?

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners (NoStarch 2020), đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Ý nghĩa của __ init __ trong Python là gì?

"__init__" là một phương thức được đặt lại trong các lớp python . Nó được biết đến như một hàm tạo trong các khái niệm hướng đối tượng. Phương thức này được gọi khi một đối tượng được tạo từ lớp và nó cho phép lớp khởi tạo các thuộc tính của lớp.

__ init __( self trong Python là gì?

Từ khóa self in trong Python được sử dụng cho tất cả các phiên bản trong một lớp . Bằng cách sử dụng từ khóa self, người ta có thể dễ dàng truy cập tất cả các thể hiện được định nghĩa trong một lớp, bao gồm các phương thức và thuộc tính của nó. trong đó. __init__ là một trong những phương thức dành riêng trong Python. Trong lập trình hướng đối tượng, nó được gọi là hàm tạo.

Cú pháp chính xác cho __ init __ là gì?

Trình tạo __init__ mặc định . lớptên_lớp(). def __init__(bản thân). # Các câu lệnh của hàm tạo # các phương thức lớp khác … …

Phương thức __ init __ trả về cái gì?

__init__ không trả về bất cứ thứ gì và phải luôn trả về Không .