Khi nào chúng ta nên sử dụng self trong python?

Tham số self thường được sử dụng trong lập trình hướng đối tượng, tham số self được thêm vào bên trong các phương thức của lớp, trong bài viết này chúng tôi sẽ giải thích cho bạn lý do tại sao nó tồn tại

Đó là một tham chiếu đến đối tượng. Lý do bạn cần sử dụng bản thân. là do Python sử dụng điều này để chỉ các thuộc tính cá thể

khóa học liên quan. Khóa học & bài tập lập trình Python

Giới thiệu

Trong lập trình hướng đối tượng, bạn có thể tạo nhiều đối tượng từ một lớp

Mỗi đối tượng có thể có các giá trị duy nhất cho các biến

obj1 = Person[]
obj2 = Person[]
obj3 = Person[]

Sau đó đặt [các] biến đối tượng

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"

Vì vậy, trực quan như thế này

Nếu bạn muốn truy cập các biến đối tượng bên trong một lớp thì sao?

Lớp không biết giá trị biến nào thuộc về đối tượng nào

class Person:
# Who is Sally, Sandra or Steve?

Bằng cách sử dụng biến self, nó có thể đặt hoặc lấy các biến đối tượng

Python sau đó biết nó nên truy cập các biến cho các đối tượng đó

Đoạn mã dưới đây đặt hai giá trị biến

Trong một lớp, họ có thể được truy cập bởi

class Person:
# Who is Sally, Sandra or Steve?
3, điều này đề cập đến bản thân tôi, tôi. e. thuộc tính thể hiện của đối tượng hiện tại

class Person:
def meet[self]:
print["I am " + self.name]

Nếu một đối tượng gọi

class Person:
# Who is Sally, Sandra or Steve?
4, thì chính đối tượng đó được chuyển thành đối số self as [ẩn]

>>> obj1.meet[]
I am Sally

>>> obj2.meet[]
I am Sandra

>>> obj3.meet[]
I am Steve

Nếu bạn là người mới bắt đầu học Python, thì tôi thực sự khuyên bạn nên đọc cuốn sách này

tự ví dụ

Nhớ lại rằng bạn có thể tạo các đối tượng từ một lớp

Với một lớp, bạn có thể tạo một hoặc nhiều đối tượng duy nhất

Một đối tượng có thể được tạo ra như thế này

cat = Animal[]

Khi bạn tạo một đối tượng từ một lớp, chính đối tượng đó được truyền dưới dạng tham số [trong hàm tạo]

Xem từ self trong hàm tạo bên dưới

________số 8

Do đó, chính đối tượng được thông qua

Nếu bạn tạo hai đối tượng, cả hai sẽ được truyền dưới dạng tham số trong hàm tạo [

class Person:
# Who is Sally, Sandra or Steve?
5]

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"
0

Bởi vì bạn chuyển chính đối tượng đó làm tham số trong hàm tạo, các biến đối tượng có thể được truy cập bằng từ khóa

class Person:
# Who is Sally, Sandra or Steve?
5

Nếu bạn có lớp như được định nghĩa dưới đây

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"
2

Nó có một phương thức

class Person:
# Who is Sally, Sandra or Steve?
7 lấy đối tượng và tên biến

Mỗi lần bạn gọi phương thức

class Person:
# Who is Sally, Sandra or Steve?
7, chính đối tượng đó sẽ được chuyển

Từ khóa self có thể được sử dụng để đặt tên đối tượng dòng điện, bạn có thể làm điều này

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"
5

Chúng trông giống nhau, nhưng chúng khác nhau

Phương thức

class Person:
# Who is Sally, Sandra or Steve?
7 được gọi với một tên khác, nhưng cũng với một đối tượng khác

Cuộc gọi đầu tiên chuyển đối tượng cat dưới dạng tham số ẩn [tự]

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"
0

Cuộc gọi thứ hai chuyển đối tượng dog dưới dạng tham số ẩn [bản thân]

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"
1

Nếu bạn xuất

class Person:
def meet[self]:
print["I am " + self.name]
0 hoặc
class Person:
def meet[self]:
print["I am " + self.name]
1, bạn sẽ thấy các biến đối tượng đã được thay đổi bên trong lớp

Nếu bạn là người mới bắt đầu học Python, thì tôi thực sự khuyên bạn nên đọc cuốn sách này

Bạn có thể bỏ qua biến “bản thân” không?

Từ khóa self được sử dụng để truy cập các biến đối tượng. Bạn có thể bỏ qua điều này?

Câu trả lời ngắn gọn là không

Nếu bạn thử, nó sẽ báo lỗi

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"
2

Đó là bởi vì hàm

class Person:
def meet[self]:
print["I am " + self.name]
2 không chấp nhận đối số bằng 0 nhưng chúng tôi đã cung cấp một đối số

Bản thân đối tượng

class Person:
def meet[self]:
print["I am " + self.name]
3 được tự động chuyển thành đối số đầu tiên

Đó là lý do tại sao self được yêu cầu làm đối số trong hàm lớp

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"
3

Vì đối tượng được truyền dưới dạng đối số nên bạn có thể truy cập các biến đối tượng

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"
4

python tự đối tượng

Biến self được liên kết với đối tượng hiện tại

Ví dụ dưới đây cho thấy rằng

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"
5

Bạn có thể tạo đối tượng mới

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"
6

Sau đó, khi gọi phương thức

class Person:
def meet[self]:
print["I am " + self.name]
4, đối tượng được truyền dưới dạng đối số ẩn

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"
7

Trên thực tế, đối tượng được truyền cả khi được tạo [đến hàm tạo] và khi gọi phương thức [setBrand]

Từ khóa self phải được bao gồm cho mọi phương thức lớp

Tại sao không tự ẩn?

Trong Python, bạn phải tự viết mỗi lần trong một lớp

Nó yêu cầu định nghĩa rõ ràng

Triết lý của Python là “Rõ ràng tốt hơn ẩn ý”

Bạn có thể đọc thêm về quyết định đó tại đây

self trong các ngôn ngữ lập trình khác

Trong các ngôn ngữ lập trình khác, bạn có một cái gì đó tương tự với một cú pháp khác

Ngôn ngữ lập trình Java đã sử dụng

class Person:
def meet[self]:
print["I am " + self.name]
5 để thay thế

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"
8

Ruby sử dụng ký hiệu

class Person:
def meet[self]:
print["I am " + self.name]
6

obj1.name = "Sally"
obj2.name = "Sandra"
obj3.name = "Steve"
9

Mặc dù chúng khác nhau về mặt cú pháp,

Tất cả các ngôn ngữ lập trình hướng đối tượng đều đề cập đến dữ liệu đối tượng theo cách tương tự

Đó là tất cả cho cùng một mục đích. để truy cập các biến đối tượng trong lớp

Vì vậy, bản thân của Python tương tự như

class Person:
def meet[self]:
print["I am " + self.name]
5 của Java,
class Person:
def meet[self]:
print["I am " + self.name]
6 của Ruby và
class Person:
def meet[self]:
print["I am " + self.name]
5 của C++

các biến tương tự cho phương thức lớp và phương thức tĩnh

Bạn đã học về bản thân trước đây, đây là lớp mặc định thông thường

Bây giờ vào một cái gì đó khác nhau. phương pháp lớp

Một phương thức lớp có thể được gọi mà không cần tạo đối tượng, bạn gọi nó trực tiếp trên lớp

class Person:
# Who is Sally, Sandra or Steve?
0

Nếu bạn có một phương thức lớp, bạn có thể sử dụng cls để thay thế

class Person:
# Who is Sally, Sandra or Steve?
1

Ở đây cls đề cập đến các biến lớp, không phải biến đối tượng

class Person:
# Who is Sally, Sandra or Steve?
2

Kết quả đầu ra này

>>> obj1.meet[]
I am Sally

>>> obj2.meet[]
I am Sandra

>>> obj3.meet[]
I am Steve
0

Đối với một phương thức tĩnh, nó không bắt buộc

Đó là bởi vì phương thức tĩnh chỉ là phương thức, chúng không thể truy cập trực tiếp bất kỳ biến lớp hoặc biến đối tượng nào

Điều gì xảy ra nếu bạn không sử dụng self trong Python?

Nếu không có đối số self, cùng một lớp không thể chứa thông tin cho cả hai đối tượng này . Tuy nhiên, do class chỉ là bản thiết kế nên self cho phép truy cập các thuộc tính và phương thức của từng đối tượng trong python. Điều này cho phép mỗi đối tượng có các thuộc tính và phương thức riêng.

__ init __[ bản thân là gì?

phương thức __init__ . Nó được gọi là một hàm tạo trong thuật ngữ hướng đối tượng. 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

Chủ Đề