Hướng dẫn is self optional in python? - là tự tùy chọn trong python?

Tháng 11-25-2016, 08:33 PM (Bài đăng này được sửa đổi lần cuối: tháng 11-25-2016, 08:33 PM bởi Meems.) (This post was last modified: Nov-25-2016, 08:33 PM by meems.)

Tôi đến từ một ngôn ngữ không sử dụng từ khóa 'tự'. Ví dụ 'bản thân' này được tìm thấy trên mạng không giải thích cho tôi tại sao bản thân là cần thiết. Trong thực tế, khi tôi xóa mã 'bản thân', mã vẫn hoạt động.

class Restaurant(object):
   bankrupt = False
   def open_branch(self):
       if not self.bankrupt:
           print("branch opened")

x=Restaurant()
x.bankrupt= True
print x.bankrupt
class Restaurant(object):
    bankrupt = False
    def open_branch():
        if not bankrupt:
            print("branch opened")

x=Restaurant()
x.bankrupt= True
print x.bankrupt

Mã vẫn hoạt động với bản thân bị loại bỏ.

Tôi đã thấy các ví dụ khác trong đó các chức năng được xác định để lấy một đối số 'tự', không thực sự yêu cầu sau đó khi được gọi. ví dụ.
e.g.

class BankAccount(object):
   def __init__(self, initial_balance=0):
       self.balance = initial_balance
   def deposit(self, amount):
       self.balance += amount
   def withdraw(self, amount):
       self.balance -= amount
   def overdrawn(self):
       return self.balance < 0

my_account = BankAccount(15)
my_account.withdraw(5)
print my_account.balance

Gọi chức năng rút tiền không yêu cầu bất kỳ biến nào để điền vào tham số 'tự'.

Vậy .... 'tự' có dư thừa không? Mã đơn giản nhất mà bạn biết ở đâu là thiết yếu, nếu không có mã nào sẽ không hoạt động?
Is 'self' redundant? What is the simplest code you know of where self is essential, without which the code won't work?

Bài viết: 5.1385,138

Chủ đề: 394394

Tham gia: Tháng 9 năm 2016Sep 2016

Danh tiếng: 170 170

Tháng 11-25-2016, 09:36 PM (Bài đăng này được sửa đổi lần cuối: tháng 11-25-2016, 09:36 PM của Metulburr.) (This post was last modified: Nov-25-2016, 09:36 PM by metulburr.)

Quote:
   def open_branch(self):

Tự xác định đây là một phương thức thể hiện, trong khi không có nó sẽ là một phương thức lớp.

Trích dẫn: Mã vẫn hoạt động với bản thân bị loại bỏ.Code still works with self removed.

bạn chưa bao giờ thực sự gọi phương thức open_branch nếu bạn đã làm thông qua isntance & nbsp; nó sẽ cho bạn lỗi

Error:

Traceback (most recent call last):   File "test1.py", line 9, in     x.open_branch() TypeError: open_branch() takes no arguments (1 given)

Tương tự với phương pháp thu được, nếu bạn tự xóa, bạn sẽ nhận được

Error:

Traceback (most recent call last):   File "test1.py", line 12, in     my_account.withdraw(5) TypeError: withdraw() takes exactly 1 argument (2 given)

phiên bản my_account đang gọi một phương thức mà nó hy vọng sẽ lấy tham số đầu tiên làm chính nó

http://neopythonic.blogspot.com/2008/10/...-stay.html

Guido & nbsp; van & nbsp; Rossum đã viết: Bruce Eckel có & nbsp; Blogged & nbsp; về một đề xuất để xóa 'tự' khỏi danh sách các phương thức chính thức. Tôi sẽ giải thích tại sao đề xuất này không thể bay.blogged about a proposal to remove 'self' from the formal parameter list of methods. I'm going to explain why this proposal can't fly.

Đề xuất của Bruce

Bruce hiểu rằng chúng ta vẫn cần một cách để phân biệt các tham chiếu đến các biến thể hiện từ các tham chiếu đến các biến khác, vì vậy anh ta đề xuất biến 'tự' thành một từ khóa thay thế. Xem xét một lớp điển hình với một phương pháp, ví dụ:

class C:
  def meth(self, arg):
     self.val = arg
     return self.val
UNDER Đề xuất của Bruce Điều này sẽ trở thành: ________ 7that Tiết kiệm 6 ký tự cho mỗi phương pháp. Tuy nhiên, tôi không tin Bruce đề xuất điều này để anh ta phải gõ ít hơn. Tôi nghĩ rằng anh ấy quan tâm nhiều hơn về thời gian bị lãng phí bởi các lập trình viên (có lẽ đến từ các ngôn ngữ khác) trong đó tham số 'bản thân' không cần phải được chỉ định, và đôi khi quên nó (mặc dù họ biết rõ hơn - thói quen là một lực lượng mạnh mẽ ). Đúng là việc bỏ qua 'bản thân' từ danh sách tham số có xu hướng dẫn đến các thông báo lỗi tối nghĩa hơn là quên gõ 'bản thân'. trước một biến thể hiện hoặc tham chiếu phương thức. Có lẽ thậm chí tệ hơn (như Bruce đề cập) là thông báo lỗi bạn nhận được khi phương thức được khai báo chính xác nhưng cuộc gọi có số lượng đối số sai, như trong ví dụ này được đưa ra bởi Bruce: ________ 8 Tôi đồng ý rằng điều này là khó hiểu, nhưng tôi muốn sửa chữa Thông báo lỗi này & nbsp; mà không thay đổi ngôn ngữ.

Tại sao đề xuất của Bruce không thể hoạt động

Trước tiên, hãy để tôi đưa ra một vài cuộc tranh luận điển hình được đưa vào chống lại đề xuất của Bruce.

Có một lập luận khá tốt để đưa ra rằng việc yêu cầu 'bản thân' trong danh sách tham số củng cố tính tương đương lý thuyết giữa hai cách gọi một phương thức này, cho rằng 'foo' là một ví dụ của 'C':

Đối số khác để giữ 'bản thân' trong danh sách tham số rõ ràng là khả năng sửa đổi động một lớp bằng cách chọc một hàm vào nó, tạo ra một phương thức tương ứng. Ví dụ: chúng ta có thể tạo một lớp hoàn toàn tương đương với 'C' ở trên như sau:# Xác định một lớp trống: ________ 10# Xác định chức năng toàn cầu: ________ 11# Poke phương thức vào lớp: ________ 12Note mà tôi đổi tên thành 'Tự' ' tham số để 'bản thân' 'để nhấn mạnh rằng (về mặt cú pháp), chúng tôi không xác định một phương thức ở đây. Bây giờ các trường hợp của C có một phương thức với một đối số có tên 'meth' hoạt động chính xác như trước. Nó thậm chí còn hoạt động cho các trường hợp C đã được tạo ra & nbsp; trước & nbsp; phương thức đã được chọc vào lớp.
# Define an empty class:
class Restaurant(object):
    bankrupt = False
    def open_branch():
        if not bankrupt:
            print("branch opened")

x=Restaurant()
x.bankrupt= True
print x.bankrupt
0# Define a global function:
class Restaurant(object):
    bankrupt = False
    def open_branch():
        if not bankrupt:
            print("branch opened")

x=Restaurant()
x.bankrupt= True
print x.bankrupt
1# Poke the method into the class:
class Restaurant(object):
    bankrupt = False
    def open_branch():
        if not bankrupt:
            print("branch opened")

x=Restaurant()
x.bankrupt= True
print x.bankrupt
2Note that I renamed the 'self' parameter to 'myself' to emphasize that (syntactically) we're not defining a method here. Now instances of C have a method with one argument named 'meth' that works exactly as before. It even works for instances of C that were created before the method was poked into the class.

Tôi cho rằng Bruce không đặc biệt quan tâm đến sự tương đương trước đây. Tôi đồng ý rằng nó có tầm quan trọng lý thuyết hơn. Ngoại lệ duy nhất tôi có thể nghĩ đến là thành ngữ cũ để gọi một phương pháp siêu. Tuy nhiên, thành ngữ này khá dễ bị lỗi (chính xác là do yêu cầu phải rõ ràng & nbsp; pass & nbsp; 'tự'), và đó là lý do tại sao trong Python 3000 Tôi đề nghị sử dụng 'Super ()' trong mọi trường hợp.pass 'self'), and that's why in Python 3000 I'm recommending the use of 'super()' in all cases.

Bruce có thể có thể nghĩ ra một cách để làm cho tác phẩm tương đương thứ hai hoạt động - có một số trường hợp sử dụng trong đó điều này thực sự quan trọng. Tôi không biết Bruce dành bao nhiêu thời gian để suy nghĩ về cách thực hiện đề xuất của mình, nhưng tôi cho rằng anh ấy đang suy nghĩ theo các dòng tự động thêm một tham số chính thức có tên là 'tự' vào tất cả các phương thức được xác định trực tiếp bên trong một lớp (tôi phải Thêm 'trực tiếp' để các chức năng lồng vào các phương thức bên trong được miễn trừ khỏi tính tự động này). Bằng cách này, sự tương đương đầu tiên có thể được thực hiện để giữ yên.

Tuy nhiên, có một tình huống mà tôi không nghĩ Bruce có thể sửa chữa mà không cần thêm một số loại ESP vào trình biên dịch: & NBSP; Trang trí. Điều này tôi tin là sự sụp đổ cuối cùng của đề xuất của Bruce.decorators. This I believe is the ultimate downfall of Bruce's proposal.

Khi một định nghĩa phương thức được trang trí, chúng ta không biết có nên tự động cung cấp cho nó một tham số 'tự' hay không: người trang trí có thể biến hàm thành một phương thức tĩnh (không có 'tự') hoặc phương pháp lớp (mà Có một loại bản thân hài hước đề cập đến một lớp thay vì một ví dụ), hoặc nó có thể làm một cái gì đó hoàn toàn khác (thật tầm thường khi viết một người trang trí thực hiện '@ClassMethod' hoặc '@staticmethod' trong Python thuần túy). Không có cách nào mà không biết người trang trí làm gì có nên ban cho phương pháp được xác định bằng một đối số 'tự' ẩn hay không.

Tôi từ chối các bản hack như '@ClassMethod' và '@staticmethod' đặc biệt. Tôi cũng không nghĩ rằng sẽ là một ý tưởng tốt để tự động quyết định liệu một cái gì đó được cho là phương pháp lớp, phương pháp ví dụ hoặc phương pháp tĩnh từ việc kiểm tra cơ thể một mình (như ai đó đề xuất trong các bình luận về đề xuất của Bruce): Điều này Làm cho khó khăn hơn để biết nó nên được gọi từ tiêu đề 'def' hơn như thế nào.

Trong các bình luận, tôi đã thấy một số đề xuất khá cực đoan để cứu đề xuất của Bruce, nhưng nói chung là phải trả giá cho việc làm cho các quy tắc trở nên khó theo hơn hoặc yêu cầu những thay đổi sâu sắc hơn ở nơi khác đối với ngôn ngữ - khiến cho việc chấp nhận đề xuất này là điều chúng ta có thể làm trong Python 3.1. Đối với 3.1, nhân tiện, quy tắc sẽ một lần nữa rằng các tính năng mới chỉ được chấp nhận nếu chúng vẫn tương thích ngược.

Một đề xuất có một cái gì đó dành cho nó (và có thể tương thích về phía sau) là chỉ đơn giản là chấp nhận

class Restaurant(object):
    bankrupt = False
    def open_branch():
        if not bankrupt:
            print("branch opened")

x=Restaurant()
x.bankrupt= True
print x.bankrupt
3oSide Một lớp là đường cú pháp cho ____14i thấy không có lý do gì với đề xuất này để biến 'tự' thành một từ dành riêng hoặc yêu cầu tên tiền tố chính xác là 'tự'. Nó cũng đủ dễ dàng để cho phép điều này đối với các phương thức lớp: ________ 15now, tôi không nói rằng tôi thích điều này hơn so với hiện trạng. Nhưng tôi thích nó tốt hơn rất nhiều so với đề xuất của Bruce hoặc những đề xuất cực đoan hơn được đưa ra trong các bình luận cho blog của anh ấy, và nó có lợi thế lớn là nó tương thích ngược và có thể phát triển thành một PEP với một triển khai tham chiếu mà không cần quá nhiều cố gắng. .
class Restaurant(object):
    bankrupt = False
    def open_branch():
        if not bankrupt:
            print("branch opened")

x=Restaurant()
x.bankrupt= True
print x.bankrupt
4I see no reason with this proposal to make 'self' a reserved word or to require that the prefix name be exactly 'self'. It would be easy enough to allow this for class methods as well:
class Restaurant(object):
    bankrupt = False
    def open_branch():
        if not bankrupt:
            print("branch opened")

x=Restaurant()
x.bankrupt= True
print x.bankrupt
5Now, I'm not saying that I like this better than the status quo. But I like it a lot better than Bruce's proposal or the more extreme proposals brought up in the comments to his blog, and it has the great advantage that it is backward compatible, and can be evolved into a PEP with a reference implementation without too much effort. (I think Bruce would have found out the flaws in his own proposal if he had actually gone through the effort of writing a solid PEP for it or trying to implement it.)

Tôi có thể tiếp tục nhiều hơn, nhưng đó là một buổi sáng chủ nhật nắng đẹp và tôi có những kế hoạch khác ... :-)

Bài viết: 687687

Chủ đề: 3737

Tham gia: Tháng 9 năm 2016Sep 2016

Danh tiếng: 24 24

. Ví dụ 'bản thân' này được tìm thấy trên mạng không giải thích cho tôi tại sao bản thân là cần thiết. Trong thực tế, khi tôi xóa mã 'tự', mã vẫn hoạt động .________ 0
class Restaurant(object):
    bankrupt = False
    def open_branch():
        if not bankrupt:
            print("branch opened")

x=Restaurant()
x.bankrupt= True
print x.bankrupt
Code vẫn hoạt động với bản thân bị loại bỏ.
meems Wrote: I'm coming from a language that doesn't use the keywords 'self'. This 'self' example found on the net doesn't explain to me why self is necessary. In fact when I removed the 'self' the code still worked.
class Restaurant(object):
   bankrupt = False
   def open_branch(self):
       if not self.bankrupt:
           print("branch opened")

x=Restaurant()
x.bankrupt= True
print x.bankrupt
class Restaurant(object):
    bankrupt = False
    def open_branch():
        if not bankrupt:
            print("branch opened")

x=Restaurant()
x.bankrupt= True
print x.bankrupt
Code still works with self removed.

Tôi đã thấy các ví dụ khác trong đó các chức năng được xác định để lấy một đối số 'tự', không thực sự yêu cầu sau đó khi được gọi. ví dụ.
e.g.

class BankAccount(object):
   def __init__(self, initial_balance=0):
       self.balance = initial_balance
   def deposit(self, amount):
       self.balance += amount
   def withdraw(self, amount):
       self.balance -= amount
   def overdrawn(self):
       return self.balance < 0

my_account = BankAccount(15)
my_account.withdraw(5)
print my_account.balance
Calling Chức năng rút tiền không yêu cầu bất kỳ biến nào để điền vào tham số 'tự'.

Vậy .... 'tự' có dư thừa không? Mã đơn giản nhất mà bạn biết ở đâu là thiết yếu, nếu không có mã nào sẽ không hoạt động?
Is 'self' redundant? What is the simplest code you know of where self is essential, without which the code won't work?

Mã của bạn hoạt động vì khi bạn sử dụng nó "phá sản" thực sự là một biến lớp trong Python. Bạn mã sẽ không hoạt động với hai trường hợp khác nhau của nhà hàng. Bạn nên sử dụng self.bankrupt = false để tạo biến/thuộc tính.self.bankrupt=false to create an instance variable/attribute.

Trừ khi có ghi chú khác, mã trong các bài đăng của tôi nên được hiểu là "đề xuất mã hóa" và việc sử dụng nó có thể đòi hỏi nhiều tế bào thần kinh hơn hai điều cần thiết cho CTRL-C/CTRL-V. Nơi một cửa của bạn cho tất cả các nhu cầu của bạn: gimp-forum.net
Your one-stop place for all your GIMP needs: gimp-forum.net

Meems người Pháp ngớ ngẩn
Silly Frenchman

Bài viết: 2424

Chủ đề: 1010

Tham gia: tháng 11 năm 2016Nov 2016

Danh tiếng: 0 0

Tháng 11-26-2016, 12:45 sáng (Bài đăng này được sửa đổi lần cuối: tháng 11-26-2016, 12:54 AM bởi Meems.) (This post was last modified: Nov-26-2016, 12:54 AM by meems.)

Cảm ơn tôi thấy bây giờ rõ ràng là tôi cần gọi phương thức lớp để kiểm tra xem mã có hoạt động mà không có bản thân hay không.

2 điều còn lại: a.) Điểm của tôi rằng khi một hàm được gọi, bản thân không được đặt trong danh sách tham số, nhưng nó xuất hiện trong định nghĩa hàm. Điều này là ngu ngốc, và sẽ mất một số làm quen.
a.) My point that when a function is called, self is not put in the parameter list, but it does appear in the function definition. This is dumb, and will take some getting used to.

ví dụ.

class Restaurant(object):
    bankrupt = False
    def open_branch():
        if not bankrupt:
            print("branch opened")

x=Restaurant()
x.bankrupt= True
print x.bankrupt
9

Nhưng sau đó khi được gọi ...

class BankAccount(object):
   def __init__(self, initial_balance=0):
       self.balance = initial_balance
   def deposit(self, amount):
       self.balance += amount
   def withdraw(self, amount):
       self.balance -= amount
   def overdrawn(self):
       return self.balance < 0

my_account = BankAccount(15)
my_account.withdraw(5)
print my_account.balance
0

b.) Vẫn không hiểu tại sao bản thân là cần thiết. Có vẻ như đó là một lý do khá sâu sắc để làm với 'người trang trí', đó là một khái niệm mà tôi không biết và chưa bao giờ sử dụng. Nếu bất cứ ai biết về ví dụ đơn giản nhất về mã hoặc mã giả mà người khiếu nại sẽ không thể hiểu do thiếu 'bản thân', tôi sẽ quan tâm đến việc xem nó.

Mục nhập wiki trên 'This' nói rằng phạm vi từ vựng có thể được sử dụng để khắc phục các vấn đề phát sinh khi không có 'cái này'. Phạm vi từ vựng là điều tôi hiểu và sử dụng. Tuy nhiên, tôi không thấy làm thế nào nó giải quyết được vấn đề không có 'cái này' bởi vì tôi không thấy có vấn đề gì khi bắt đầu với:/https://en.wikipedia.org/wiki/this_ (comp ... ogramming)
Lexical scoping is something I understand and use. However I don't see how it solves the problem of not having a 'this' because I don't see there's a problem to start with :/
https://en.wikipedia.org/wiki/This_(comp...ogramming)


Hãy để tôi đặt nó một cách khác:

Theo tôi, 'tự' được gọi hoàn toàn trong tên biến

class BankAccount(object):
   def __init__(self, initial_balance=0):
       self.balance = initial_balance
   def deposit(self, amount):
       self.balance += amount
   def withdraw(self, amount):
       self.balance -= amount
   def overdrawn(self):
       return self.balance < 0

my_account = BankAccount(15)
my_account.withdraw(5)
print my_account.balance
1

Điều 'bản thân' đó không cần phải nằm trong các thông số là một triệu chứng của bản thân là dư thừa, nhưng có vẻ như nhóm Python Dev không muốn chấp nhận điều này!

Bài viết: 5.1385,138

Chủ đề: 394394

Tham gia: Tháng 9 năm 2016Sep 2016

Danh tiếng: 170 170

Trích dẫn: 'Bản thân' đó không cần phải nằm trong các thông số là một triệu chứng của bản thân là dự phòng, nhưng có vẻ như nhóm Python Dev không muốn chấp nhận điều này!that 'self' doesn't need to be in the parameters is a symptom of self being redundant, but seems the python dev team don't want to accept this !

rõ ràng là tốt hơn

Hướng dẫn is self optional in python? - là tự tùy chọn trong python?

class BankAccount(object):
   def __init__(self, initial_balance=0):
       self.balance = initial_balance
   def deposit(self, amount):
       self.balance += amount
   def withdraw(self, amount):
       self.balance -= amount
   def overdrawn(self):
       return self.balance < 0

my_account = BankAccount(15)
my_account.withdraw(5)
print my_account.balance
2
Trích dẫn: a.) Điểm của tôi rằng khi một hàm được gọi, bản thân không được đặt trong danh sách tham số, nhưng nó xuất hiện trong định nghĩa hàm. Điều này là ngu ngốc, và sẽ mất một số làm quen.a.) My point that when a function is called, self is not put in the parameter list, but it does appear in the function definition. This is dumb, and will take some getting used to.

Tôi phải chỉ sử dụng Python quá lâu, tôi thậm chí không nghĩ về nó. Tôi (cá nhân) coi bản thân trong định nghĩa lớp là chuyển đổi, để nói rằng tôi muốn đây là một phương thức thể hiện. Đó là một định danh dễ dàng cho các phương thức trong một lớp để xác định phương thức loại/phiên bản nào. & Nbsp; và khi gọi nó từ một trường hợp, không cần thiết vì nó rõ ràng là phương thức thể hiện.it is obviously an the instance method.

Nếu bạn nghĩ rằng nó dư thừa để đặt bản thân vào các tham số, thì sẽ còn dư thừa hơn nữa để đặt bản thân vào cuộc gọi.

Bài viết: 3,4553,455

Chủ đề: 100100

Tham gia: Tháng 9 năm 2016Sep 2016

Danh tiếng: 170 143

Trích dẫn: 'Bản thân' đó không cần phải nằm trong các thông số là một triệu chứng của bản thân là dự phòng, nhưng có vẻ như nhóm Python Dev không muốn chấp nhận điều này!

class BankAccount(object):
   def __init__(self, initial_balance=0):
       self.balance = initial_balance
   def deposit(self, amount):
       self.balance += amount
   def withdraw(self, amount):
       self.balance -= amount
   def overdrawn(self):
       return self.balance < 0

my_account = BankAccount(15)
my_account.withdraw(5)
print my_account.balance
3

rõ ràng là tốt hơn

Bài viết: 5.1385,138

Chủ đề: 394394

Tham gia: Tháng 9 năm 2016Sep 2016

Danh tiếng: 170 170

Trích dẫn: 'Bản thân' đó không cần phải nằm trong các thông số là một triệu chứng của bản thân là dự phòng, nhưng có vẻ như nhóm Python Dev không muốn chấp nhận điều này!nilamo Wrote: It doesn't HAVE to be self...
class BankAccount(object):
   def __init__(self, initial_balance=0):
       self.balance = initial_balance
   def deposit(self, amount):
       self.balance += amount
   def withdraw(self, amount):
       self.balance -= amount
   def overdrawn(self):
       return self.balance < 0

my_account = BankAccount(15)
my_account.withdraw(5)
print my_account.balance
4 :p

rõ ràng là tốt hơn

Bài viết: 3,4553,455

Chủ đề: 100100

Tham gia: Tháng 9 năm 2016Sep 2016

Danh tiếng: 170 143

Trích dẫn: 'Bản thân' đó không cần phải nằm trong các thông số là một triệu chứng của bản thân là dự phòng, nhưng có vẻ như nhóm Python Dev không muốn chấp nhận điều này!
...but I also think

class BankAccount(object):
   def __init__(self, initial_balance=0):
       self.balance = initial_balance
   def deposit(self, amount):
       self.balance += amount
   def withdraw(self, amount):
       self.balance -= amount
   def overdrawn(self):
       return self.balance < 0

my_account = BankAccount(15)
my_account.withdraw(5)
print my_account.balance
6 should be a syntax error, so maybe I'm weird.

Bản thân có bắt buộc trong Python không?

Không giống như các ngôn ngữ lập trình khác, Python không sử dụng cú pháp của@@@để truy cập các thuộc tính thể hiện. Đây là lý do duy nhất tại sao bạn cần sử dụng biến bản thân trong Python. Ngôn ngữ chứa các phương thức cho phép thể hiện được truyền tự động nhưng không được nhận tự động.you need to use the self variable in Python. The language contains methods that allow the instance to be passed automatically but not received automatically.

Tôi có thể sử dụng cái này thay vì bản thân trong Python không?

Bạn có thể sử dụng "" thay vì "bản thân" này nhiều như bạn muốn. Tuy nhiên, điều đó có thể gây nhầm lẫn cho một số công cụ kiểm tra mã cú pháp và kiểm tra mã. Sử dụng "bản thân" chỉ là một quy ước. Nó từ đâu ra vậy?. However, that might confuse some syntax highlighters and code inspection tools. Using "self" is just a convention. Where did "this" come from?

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

Nếu không có lập luận tự, cùng một lớp không thể giữ thông tin cho cả hai đối tượng này.Tuy nhiên, vì lớp chỉ là một kế hoạch chi tiết, tự cho phép truy cập vào 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.

Tự () trong Python là gì?

Tham số tự là tham chiếu đến thể hiệ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.a reference to the current instance of the class, and is used to access variables that belongs to the class.