_init_ và self trong Python là gì?

Chúng tôi có một đối tượng

>>> p = Point()
>>> p

5 tại thời điểm này, nhưng đối tượng
>>> p = Point()
>>> p

5 này thực sự không có ý nghĩa gì vì nó không có chức năng (nó không lưu trữ bất kỳ dữ liệu hữu ích nào hoặc có bất kỳ phương thức nào)

Chúng tôi có thể thêm thuộc tính vào đối tượng

>>> p = Point()
>>> p

5 theo cách thủ công để lưu trữ một số dữ liệu về chúng

Nhưng làm như vậy sẽ là một chút ngớ ngẩn

Sẽ tốt hơn nếu bằng cách nào đó chúng ta có thể gọi lớp này với các đối số để tự động lưu trữ các thuộc tính

Phương thức khởi tạo

Hiện tại, nếu chúng ta cố gắng gọi lớp này bằng các đối số, chúng ta sẽ gặp lỗi

>>> p = Point(1, 2)
Traceback (most recent call last):
  File "", line 1, in 
TypeError: Point() takes no arguments
>>>

Để chấp nhận các đối số, chúng ta cần định nghĩa một phương thức

>>> p = Point()
>>> p

8 trong lớp của mình

    def __init__(self, x, y):
        self.x = x
        self.y = y

Đối số đầu tiên trong phương thức

>>> p = Point()
>>> p

8 của chúng ta sẽ luôn là
>>> p = Point()
>>> p

3 (giống như hầu hết mọi phương thức khác). Sau đó, chúng ta cần khai báo bất kỳ đối số nào mà chúng ta muốn lớp của mình chấp nhận

Điều chính mà bạn sẽ luôn thấy trong phương pháp

>>> p = Point()
>>> p

8, là gán cho các thuộc tính

Đây là lớp

>>> p = Point()
>>> p

5 mới của chúng tôi

class Point:
    """2-dimensional point."""
    def __init__(self, x, y):
        self.x = x
        self.y = y

Nếu chúng ta gọi nó như trước đây mà không có bất kỳ đối số nào, chúng ta sẽ thấy lỗi vì lớp này hiện yêu cầu hai đối số,

>>> p = Point()
>>> p

6 và
>>> p = Point()
>>> p

7

>>> p = Point()
Traceback (most recent call last):
  File "", line 1, in 
TypeError: __init__() missing 2 required positional arguments: 'x' and 'y'

Chúng ta cần cung cấp cho lớp

>>> p = Point()
>>> p

5 của mình hai đối số để có được một thể hiện mới của lớp này

Đối tượng

>>> p = Point()
>>> p

5 này hiện có thuộc tính
>>> p = Point()
>>> p

6 và thuộc tính
>>> p = Point()
>>> p

7

Điều đó có nghĩa là phương pháp

>>> p = Point()
>>> p

8 của chúng tôi được gọi là

Python gọi >>> p = Point() >>> p 8 bất cứ khi nào một lớp được gọi

Bất cứ khi nào bạn gọi một lớp, Python sẽ xây dựng một thể hiện mới của lớp đó, sau đó gọi phương thức

>>> p = Point()
>>> p

8 của lớp đó, chuyển thể hiện mới được tạo làm đối số đầu tiên (
>>> p = Point()
>>> p

3)

Không giống như nhiều ngôn ngữ lập trình,

>>> p = Point()
>>> p

8 không được gọi là "phương thức xây dựng"

Phương thức

>>> p = Point()
>>> p

8 của Python được gọi là phương thức khởi tạo. Phương thức khởi tạo khởi tạo thể hiện lớp mới của chúng ta. Vì vậy, tại thời điểm mà phương thức khởi tạo được gọi là thể hiện của lớp đã được xây dựng

Tóm lược

Khi bạn tạo một lớp mới trong Python, phương thức đầu tiên bạn có thể tạo là phương thức

>>> p = Point()
>>> p

8. Phương thức
>>> p = Point()
>>> p

8 cho phép bạn chấp nhận các đối số cho lớp của mình

Quan trọng hơn, phương thức

>>> p = Point()
>>> p

8 cho phép bạn gán các giá trị ban đầu cho các thuộc tính khác nhau trên các cá thể lớp của bạn

Ngày nay, một lập trình viên chắc chắn sẽ bắt gặp lập trình hướng đối tượng (OOP) trong sự nghiệp của họ. Là một ngôn ngữ lập trình hiện đại, Python cung cấp tất cả các phương tiện để thực hiện triết lý hướng đối tượng. Phương thức

    def __init__(self, x, y):
        self.x = x
        self.y = y
02 là cốt lõi của OOP và được yêu cầu để tạo các đối tượng


Trong bài viết này, chúng ta sẽ xem lại mô hình lập trình hướng đối tượng trước khi giải thích lý do và cách sử dụng phương thức

    def __init__(self, x, y):
        self.x = x
        self.y = y
02.  

Lập trình hướng đối tượng là gì?

Lập trình hướng đối tượng (OOP) là một mẫu lập trình bao gồm việc xác định các đối tượng và tương tác với chúng. Một đối tượng là một tập hợp các biến và hàm phức tạp và có thể được sử dụng để biểu diễn các thực thể thực như nút, máy bay hoặc người

Để khai báo, khởi tạo và thao tác với các đối tượng trong Python, chúng ta sử dụng các lớp. Chúng đóng vai trò là mẫu mà từ đó các đối tượng được tạo ra. Sơ đồ sau đây minh họa ý tưởng này

_init_ và self trong Python là gì?
_init_ và self trong Python là gì?

Chúng ta có thể thấy trong sơ đồ trên rằng lớp chó chứa các đặc điểm cụ thể của chó, chẳng hạn như giống và màu mắt, cũng như khả năng chạy và đi bộ. Hãy bắt đầu bằng cách định nghĩa một lớp trong Python

Lớp học là gì?

Một lớp định nghĩa và cấu trúc tất cả các đối tượng được tạo từ nó. Bạn có thể xem lớp như một nhà máy sản xuất đối tượng. Hãy lấy ví dụ về chó săn cáo—một giống chó. Từ quan điểm OOP, bạn có thể coi

    def __init__(self, x, y):
        self.x = x
        self.y = y
04 là một lớp bao gồm các đặc điểm của một con chó như giống hoặc màu mắt của nó. Vì Fox Terrier là một con chó, chúng ta có thể tạo một đối tượng dog sẽ kế thừa các đặc điểm của lớp của nó. Các lớp sử dụng các phương thức và hàm tạo để tạo và định nghĩa các đối tượng

Phương pháp đặc biệt và do người dùng xác định

Phương thức là các chức năng trong một lớp được thiết kế để thực hiện một nhiệm vụ cụ thể. Python phân biệt giữa các phương thức do người dùng định nghĩa, được viết bởi lập trình viên và các phương thức đặc biệt được tích hợp sẵn trong ngôn ngữ. Phương thức do người dùng định nghĩa là một hàm do lập trình viên tạo ra để phục vụ một mục đích cụ thể. Chẳng hạn, một lớp

    def __init__(self, x, y):
        self.x = x
        self.y = y
04 có thể có một phương thức
    def __init__(self, x, y):
        self.x = x
        self.y = y
06 mà đối tượng con chó có thể sử dụng. Lập trình viên tạo phương thức này và yêu cầu nó thực hiện các hành động cụ thể

Các phương thức đặc biệt được xác định bằng dấu gạch dưới kép ở hai bên tên của chúng, chẳng hạn như

    def __init__(self, x, y):
        self.x = x
        self.y = y
02. Python sử dụng các phương thức đặc biệt để nâng cao chức năng của các lớp. Hầu hết chúng hoạt động ở chế độ nền và được gọi tự động khi chương trình cần. Bạn không thể gọi họ một cách rõ ràng. Chẳng hạn, khi bạn tạo một đối tượng mới, Python sẽ tự động gọi phương thức
    def __init__(self, x, y):
        self.x = x
        self.y = y
08, phương thức này sẽ gọi phương thức
    def __init__(self, x, y):
        self.x = x
        self.y = y
02. Phương thức
    def __init__(self, x, y):
        self.x = x
        self.y = y
80 được gọi khi bạn
    def __init__(self, x, y):
        self.x = x
        self.y = y
81 một đối tượng. Mặt khác, các phương thức do người dùng định nghĩa, như
    def __init__(self, x, y):
        self.x = x
        self.y = y
82, được gọi rõ ràng

Người xây dựng

Hàm tạo là một phương thức đặc biệt mà chương trình gọi khi tạo đối tượng. Hàm tạo được sử dụng trong lớp để khởi tạo các thành viên dữ liệu cho đối tượng. Với ví dụ lớp

    def __init__(self, x, y):
        self.x = x
        self.y = y
04 của chúng tôi, bạn có thể sử dụng hàm tạo để gán các đặc điểm của con chó cho từng đối tượng
    def __init__(self, x, y):
        self.x = x
        self.y = y
84. Phương thức đặc biệt
    def __init__(self, x, y):
        self.x = x
        self.y = y
02 là hàm tạo của Python

Với sự hiểu biết về lập trình hướng đối tượng và các lớp, bây giờ chúng ta hãy xem cách thức hoạt động của phương thức

    def __init__(self, x, y):
        self.x = x
        self.y = y
02 trong chương trình Python

Tầm quan trọng của các đối tượng trong Python

Không phải lúc nào chúng ta cũng thấy nó khi viết chương trình, nhưng các đối tượng là trung tâm trong cách thức hoạt động của Python. Khi chúng ta khai báo một biến đơn giản trong Python, một đối tượng sẽ được tạo trong nền.

Nếu chúng ta thực thi đoạn mã sau.

>>> p = Point()
>>> p

5


Python sử dụng lớp str chứa các thuộc tính và phương thức, giống hệt như những gì bạn tạo trong mã của riêng mình, ngoại trừ tất cả đều diễn ra trong nền

Phương pháp __init__ hoạt động như thế nào?

Phương thức

    def __init__(self, x, y):
        self.x = x
        self.y = y
02 tương đương với Python của hàm tạo C++ theo cách tiếp cận hướng đối tượng. Hàm
    def __init__(self, x, y):
        self.x = x
        self.y = y
02  được gọi mỗi khi một đối tượng được tạo từ một lớp. Phương thức
    def __init__(self, x, y):
        self.x = x
        self.y = y
02 cho phép lớp khởi tạo các thuộc tính của đối tượng và không phục vụ mục đích nào khác. Nó chỉ được sử dụng trong các lớp học.  

Tạo một lớp học

Hãy bắt đầu bằng cách tạo một lớp

    def __init__(self, x, y):
        self.x = x
        self.y = y
0

Đầu tiên, chúng ta khai báo lớp Dog sử dụng từ khóa

class Point:
    """2-dimensional point."""
    def __init__(self, x, y):
        self.x = x
        self.y = y
00. Chúng tôi sử dụng từ khóa
class Point:
    """2-dimensional point."""
    def __init__(self, x, y):
        self.x = x
        self.y = y
01 để định nghĩa một hàm hoặc phương thức, chẳng hạn như phương thức
    def __init__(self, x, y):
        self.x = x
        self.y = y
02. Như bạn có thể thấy, phương thức
    def __init__(self, x, y):
        self.x = x
        self.y = y
02 khởi tạo hai thuộc tính.
class Point:
    """2-dimensional point."""
    def __init__(self, x, y):
        self.x = x
        self.y = y
04 và
class Point:
    """2-dimensional point."""
    def __init__(self, x, y):
        self.x = x
        self.y = y
05.  

Bây giờ chúng ta sẽ xem cách truyền các tham số này khi khai báo một đối tượng. Đây là nơi chúng ta cần từ khóa self để liên kết các thuộc tính của đối tượng với các đối số nhận được

Tạo một đối tượng

Tiếp theo, chúng ta sẽ tạo một đối tượng hoặc thể hiện của lớp

class Point:
    """2-dimensional point."""
    def __init__(self, x, y):
        self.x = x
        self.y = y
06

    def __init__(self, x, y):
        self.x = x
        self.y = y
8

Khi chúng ta tạo đối tượng

class Point:
    """2-dimensional point."""
    def __init__(self, x, y):
        self.x = x
        self.y = y
07 (là tên của con chó), trước tiên chúng ta xác định lớp mà nó được tạo ra (Dog). Tiếp theo, chúng ta chuyển các đối số “Fox Terrier” và “brown”, tương ứng với các tham số tương ứng của phương thức
    def __init__(self, x, y):
        self.x = x
        self.y = y
02 của lớp
class Point:
    """2-dimensional point."""
    def __init__(self, x, y):
        self.x = x
        self.y = y
06

Phương thức

    def __init__(self, x, y):
        self.x = x
        self.y = y
02 sử dụng từ khóa
>>> p = Point()
>>> p

21 để gán các giá trị được truyền dưới dạng đối số cho các thuộc tính đối tượng
>>> p = Point()
>>> p

22 và
>>> p = Point()
>>> p

23

Truy cập thuộc tính đối tượng

Để truy cập một thuộc tính của đối tượng Fox Terrier hoàn toàn mới của bạn, bạn có thể sử dụng dấu chấm (. ) để nhận giá trị bạn cần. Một tuyên bố in giúp chúng tôi chứng minh cách thức hoạt động của nó

class Point:
    """2-dimensional point."""
    def __init__(self, x, y):
        self.x = x
        self.y = y
0

Thực thi đoạn mã trên cho chúng ta kết quả như sau

>>> p = Point()
>>> p

2

Chương trình đã truy cập các thuộc tính của

>>> p = Point()
>>> p

24 và hiển thị chúng đúng cách

Trình tạo __init__ mặc định

Trong Python, hàm tạo không nhất thiết phải truyền tham số cho nó. Có thể có các tham số mặc định. Hàm tạo không có tham số bắt buộc được gọi là hàm tạo mặc định. Hãy viết lại lớp của chúng ta với một hàm tạo mặc định

>>> p = Point()
>>> p

8

Nếu người dùng không nhập bất kỳ giá trị nào, hàm tạo sẽ gán “German Shepherd” và “Brown” làm thuộc tính

Bây giờ chúng ta có thể tạo một thể hiện của Dog mà không cần chỉ định bất kỳ tham số nào.  

>>> p = Point()
>>> p

9

Vì không có đối số để truyền, nên chúng tôi sử dụng dấu ngoặc đơn trống sau tên lớp. Chúng ta vẫn có thể hiển thị các thuộc tính của đối tượng

>>> p = Point()
>>> p

0

Điều này mang lại cho chúng tôi đầu ra sau

>>> p = Point()
>>> p

1

Mã đơn giản này hoạt động hoàn hảo

Học cách viết mã với Udacity

Phương thức

    def __init__(self, x, y):
        self.x = x
        self.y = y
02 là tối quan trọng đối với lập trình hướng đối tượng của Python. Trong bài viết này, chúng tôi đã giải thích vai trò của phương thức
    def __init__(self, x, y):
        self.x = x
        self.y = y
02 trong ngữ cảnh của OOP và định nghĩa lớp. Phương thức
    def __init__(self, x, y):
        self.x = x
        self.y = y
02 là một trong nhiều phương thức đặc biệt được tích hợp trong Python và các lập trình viên có thể sử dụng nó có hoặc không có tham số cho mỗi lớp mà họ tạo

__ tự __ trong python là gì?

Tham số self 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.

_init_ nghĩa là gì trong một lớp học?

_init_ là hàm tạo cho một lớp . Tham số self đề cập đến thể hiện của đối tượng. Ý tưởng cơ bản là nó là một phương thức đặc biệt được gọi tự động khi một đối tượng của Lớp đó được tạo.

Mục đích của DEF __ init __( tự chức năng trong python là gì?

__init__. "__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 __ được gọi là gì?

__init__ phương thức . Phương thức này được gọi khi một đối tượng được tạo từ một lớp và nó cho phép lớp khởi tạo các thuộc tính của lớp. a constructor in object oriented terminology. This method is called when an object is created from a class and it allows the class to initialize the attributes of the class.