Hướng dẫn python class variables without self - biến lớp python không có tự

Python không để các biến lớp rơi vào phạm vi theo cách này, có hai cách để làm điều này, đầu tiên là sử dụng phương thức lớp:

@classmethod
def foo(cls):
    print(cls.foo_string)

Mà tôi sẽ tranh luận là giải pháp tốt nhất.

Thứ hai là truy cập theo tên:

@staticmethod
def foo():
    print(Foo.foo_string)

Xin lưu ý rằng nói chung, sử dụng một lớp làm không gian tên không phải là cách tốt nhất để làm điều đó, chỉ cần sử dụng một mô-đun với các hàm cấp cao hơn, vì điều này hoạt động nhiều hơn như bạn muốn.

Lý do cho việc thiếu phạm vi như thế này chủ yếu là do bản chất năng động của Python, nó sẽ hoạt động như thế nào khi bạn chèn một hàm vào lớp? Nó sẽ phải có hành vi đặc biệt được thêm vào nó một cách có điều kiện, điều này sẽ cực kỳ khó xử khi thực hiện và có khả năng mong manh. Nó cũng giúp giữ mọi thứ rõ ràng hơn là ẩn - rõ ràng một biến lớp trái ngược với biến cục bộ.

1) Tại sao

class myClass: 
    def instance_method(self): 
        return “Instance method is called”, self 
4 được yêu cầu như một tham số rõ ràng trong chữ ký phương thức?

Bởi vì các phương pháp là các chức năng và

class myClass: 
    def instance_method(self): 
        return “Instance method is called”, self 
5 chỉ là đường cú pháp cho
class myClass: 
    def instance_method(self): 
        return “Instance method is called”, self 
6. Các lớp chỉ là từ điển trong đó một số giá trị là chức năng. . Điều này phù hợp với "rõ ràng là tốt hơn so với tiềm ẩn" -Philosophy.

Ngược lại, trong các đối tượng Java thực sự là ma thuật và không thể được giảm xuống thành các thành phần đơn giản hơn trong ngôn ngữ. Trong Java (ít nhất là cho đến khi Java 8), một hàm luôn là một phương pháp thuộc sở hữu của một đối tượng và quyền sở hữu này không thể được thay đổi do tính chất tĩnh của ngôn ngữ. Do đó, không có sự mơ hồ về những gì

class myClass: 
    def instance_method(self): 
        return “Instance method is called”, self 
8 đề cập đến, vì vậy nó có ý nghĩa để có nó được xác định ngầm.

JavaScript là một ví dụ về một ngôn ngữ có

class myClass: 
    def instance_method(self): 
        return “Instance method is called”, self 
8 như Java, nhưng trong đó các chức năng có thể tồn tại tách biệt với các đối tượng như trong Python. Điều này dẫn đến rất nhiều sự nhầm lẫn về những gì
class myClass: 
    def instance_method(self): 
        return “Instance method is called”, self 
8 đề cập đến khi các chức năng được truyền xung quanh và được gọi trong các bối cảnh khác nhau. Nhiều người theo bản năng nghĩ rằng
class myClass: 
    def instance_method(self): 
        return “Instance method is called”, self 
8 phải đề cập đến một số thuộc tính nội tại của hàm, trong khi nó thực sự hoàn toàn được xác định bởi cách gọi chức năng. Tôi tin rằng việc có
class myClass: 
    def instance_method(self): 
        return “Instance method is called”, self 
8 là một tham số rõ ràng như trong Python sẽ làm cho điều này bớt khó hiểu hơn nhiều.

Một số lợi ích khác của tham số ____ 24-tham số:

  • Trang trí chỉ là các chức năng bao gồm các chức năng khác. Vì các phương pháp chỉ là chức năng, các nhà trang trí hoạt động tốt như các phương pháp. Nếu có một số loại bản thân ngầm, các nhà trang trí sẽ không hoạt động minh bạch về các phương pháp.

  • ClassMethods và phương thức tĩnh không có tham số thể hiện. ClassMethods lấy một lớp làm đối số đầu tiên (thường được gọi là

    >>>obj = myClass() 
    >>>obj.instance_method() 
    ('Instance method is called', ) 
    4). Các tham số
    class myClass: 
        def instance_method(self): 
            return “Instance method is called”, self 
    4 hoặc
    >>>obj = myClass() 
    >>>obj.instance_method() 
    ('Instance method is called', ) 
    4 rõ ràng giúp nó rõ ràng hơn nhiều về những gì đang diễn ra và những gì bạn có quyền truy cập trong phương thức.

2) Tại sao các biến thể phải luôn đủ điều kiện với "________ 37?

Trong Java, bạn không cần phải có tiền tố các biến thành viên với "

>>>obj = myClass() 
>>>obj.instance_method() 
('Instance method is called', ) 
8", nhưng trong Python "
>>>obj = myClass() 
>>>obj.instance_method() 
('Instance method is called', ) 
7" luôn được yêu cầu. Lý do là Python không có cú pháp rõ ràng để khai báo các biến, do đó sẽ không có cách nào để biết liệu
>>>myClass.instance_method(obj) 
('Instance method is called', ) 
0 có được cho là khai báo một biến cục bộ mới hoặc gán cho biến thành viên hay không. Chỉ định
>>>obj = myClass() 
>>>obj.instance_method() 
('Instance method is called', ) 
7 giải quyết sự mơ hồ này.

Nếu bạn đã làm việc trên Python, bạn có thể có biến bản thân. Bạn có thể tìm thấy nó trong các định nghĩa phương thức và trong việc khởi tạo các biến. Tuy nhiên, trước khi đến & nbsp; tự biến, chúng ta hãy có ý tưởng về các lớp và trường hợp trong Python. & Nbsp; Đây là một bài viết về & nbsp; sys.argv & nbsp; đối số dòng lệnh & nbsp; để cung cấp cho bạn sự hiểu biết sâu sắc hơn. & nbsp;self variable. You can find it in method definitions and in initializing variables. However, before coming to the self variable, let us have an idea about classes and instances in Python. Here is an article about sys.argv command line argument to give you deeper understanding.    

Phương pháp thể hiện và phương pháp lớp trong Python là gì?

Bạn có thể đã nghe nói về các trường hợp và lớp học trong khi làm việc trên Python. Các biến lớp được xác định trong một lớp và chúng được chia sẻ với tất cả các trường hợp (đối tượng) của lớp trong khi các biến thể hiện được sở hữu bởi các trường hợp của một lớp. Đối với các trường hợp khác nhau, các biến thể hiện là khác nhau. & NBSP;

Tương tự như vậy, Python cũng chứa các phương thức và phương thức thể hiện lớp. Các phương pháp lớp thông báo về tình trạng của lớp. Mặt khác, các phương thức thể hiện là đặt hoặc nhận chi tiết về các thể hiện hoặc đối tượng. & nbsp;

& nbsp; nếu bạn muốn xác định một phương thức thể hiện, tham số quan trọng nhất của phương thức phải luôn luôn phải là bản thân. Hãy cho chúng tôi hiểu điều này với sự trợ giúp của mã ví dụ - & nbsp;self. Let us understand this with the help of example code – 

class myClass: 
    def instance_method(self): 
        return “Instance method is called”, self 

Phương thức của Instance_Method, & nbsp; là một phương thức thể hiện thông thường. Phương thức chấp nhận một tham số duy nhất - tự. Biến bản thân chỉ vào một thể hiện của lớp myClass khi phương thức bị thu hồi. Mặc dù phương thức chỉ mất một tham số ở đây, nhưng nó cũng có thể chấp nhận nhiều hơn một tham số. & Nbsp;“instance_method” is a regular instance method. The method accepts one single parameter – self. The self variable points to an instance of the class myClass when the method is revoked. Though the method takes only one parameter here, it can also accept more than one parameter. 

Các phương thức thể hiện có thể dễ dàng truy cập các thuộc tính khác nhau và các phương thức khác trên cùng một đối tượng với sự trợ giúp của biến bản thân. Biến bản thân cũng có khả năng sửa đổi trạng thái của một đối tượng và sử dụng bản thân .__ Lớp __ & nbsp; Thuộc tính, các phương thức thể hiện cũng có thể truy cập lớp. Do đó, các phương thức thể hiện cũng có thể sửa đổi trạng thái lớp. & NBSP;self.__class__  attribute, instance methods can also access the class. Thus, the instance methods are also able to modify the class state. 

Bây giờ, chúng ta hãy xem những gì xảy ra khi chúng ta gọi là Instance_method,: & nbsp;“instance_method”: 

>>>obj = myClass() 
>>>obj.instance_method() 
('Instance method is called', ) 

Điều này cho thấy rằng Instance_method, & nbsp; có thể truy cập phiên bản đối tượng (được in dưới dạng & nbsp;) thông qua tham số self & nbsp;. Điều xảy ra là tham số tự được thay thế bằng đối tượng thể hiện obj & nbsp; khi phương thức được gọi. Tuy nhiên, nếu bạn vượt qua đối tượng thể hiện theo cách thủ công, bạn sẽ nhận được kết quả tương tự như trước: & nbsp;“instance_method” can access the object instance (printed as ) through the self parameter. What happens is that the self parameter is replaced with the instance object obj when the method is called. However, if you pass the instance object manually, you will get the same result as before: 

>>>myClass.instance_method(obj) 
('Instance method is called', ) 

Lưu ý rằng bản thân thực sự không phải là một từ khóa được xác định trong Python mà là một quy ước.

& Nbsp; self & nbsp; trong python? & Nbsp;Self in Python? 

Không giống như điều này & nbsp; biến trong C ++, self & nbsp; không phải là một từ khóa thay vì nó là một quy ước mã hóa hơn. Nó đại diện cho thể hiện hoặc đối tượng của một lớp và liên kết các thuộc tính của một lớp với các đối số cụ thể. Việc sử dụng biến bản thân trong Python giúp phân biệt giữa các thuộc tính (và phương thức) và các biến cục bộ. & NBSP;this variable in C++, self is not a keyword rather it is more of a coding convention. It represents the instance or objects of a class and binds the attributes of a class with specific arguments. The use of self variable in Python helps to differentiate between the instance attributes (and methods) and local variables. 

Nếu bạn không muốn các biến của lớp được chia sẻ bởi tất cả các trường hợp của lớp, bạn có thể khai báo các biến trong lớp của bạn mà không cần bản thân. Hãy cho chúng tôi hiểu điều này với một ví dụ: & nbsp;

class Car: 
    def __init__(self, model): 
self.model = model 
    def Car_info(self): 
print("Model : ", self.model) 

Ở đây, chúng tôi đã tuyên bố một chiếc xe lớp & nbsp; với một biến thể hiện self.model & nbsp; = model. Giá trị của biến thể hiện sẽ là duy nhất cho các đối tượng thể hiện của lớp có thể được khai báo. Tuy nhiên, nếu bạn muốn các biến được chia sẻ bởi tất cả các trường hợp của lớp, bạn cần khai báo các biến thể hiện không có bản thân. Nếu không, nó sẽ không rõ ràng vì tất cả các xe sẽ có cùng một mô hình. & NBSP;Car with one instance variable self.model = model. The value of the instance variable will be unique to the instance objects of the class that might be declared. However, if you want the variables to be shared by all instances of the class, you need to declare the instance variables without self. Otherwise, it would be ambiguous since all cars will have the same model. 

Cần bản thân trong Python & nbsp; 

Biến bản thân được sử dụng để biểu diễn thể hiện của lớp thường được sử dụng trong lập trình hướng đối tượng. Nó hoạt động như một tham chiếu đến đối tượng. Python sử dụng tham số tự để chỉ các thuộc tính và phương thức thể hiện của lớp. & nbsp;

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 & nbsp; Đâ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. & NBSP; “@” syntax to access the instance attributes. This is the sole reason why 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. 

Định nghĩa rõ ràng về bản thân & nbsp; 

Zen of Python cho biết, rõ ràng là tốt hơn so với tiềm ẩn. Có một vài lý do cho điều này. & NBSP;Zen of Python says “Explicit is better than Implicit”. Programmers of other languages often ask why self is passed as an explicit parameter every time to define a method. There are a few reasons for this. 

Thứ nhất, vì Python sử dụng thuộc tính phương thức hoặc phiên bản thay vì biến cục bộ khi chúng ta đọc self.name hoặc self.age, nó cho thấy hoàn toàn rõ ràng rằng bạn đang sử dụng một biến hoặc phương thức thể hiện ngay cả khi bạn không có kiến ​​thức về định nghĩa lớp. & nbsp;self.name or self.age, it makes it absolutely clear you are using an instance variable or method even if you have no knowledge about the class definition. 

Thứ hai, nếu bạn đề cập rõ ràng hoặc gọi một phương thức từ một lớp cụ thể trong Python, bạn không cần phải sử dụng bất kỳ cú pháp đặc biệt nào cho điều đó. & nbsp;

Cuối cùng, lý do thứ ba là định nghĩa rõ ràng về bản thân giúp Python hiểu có nên gán cho một biến thể hiện hay cho một biến cục bộ. Về mặt đơn giản hơn, các biến và trường hợp cục bộ tồn tại trong hai không gian tên riêng biệt và chúng ta cần thông báo cho Python nên sử dụng không gian tên nào. & NBSP;

Trình tự xây dựng lớp Python là gì? & NBSP; 

Biến bản thân trong Python cũng có thể được sử dụng để truy cập một trường biến trong định nghĩa lớp. Hãy cho chúng tôi hiểu điều này với sự trợ giúp của mã ví dụ: & nbsp;

Học sinh lớp: & NBSP;

    def __init__(self, Alex): 
        self.name = Alex    #name created in constructor 
    def get_student_name(self): 
        return self.name 

Trong ví dụ trên, tự đề cập đến tuổi biến đổi & nbsp; của học sinh lớp. & Nbsp; tuổi biến & nbsp; là cục bộ với phương pháp. Trong khi phương thức đang chạy, tuổi biến đổi & nbsp; tồn tại trong lớp. & Nbsp;age of the class Student. The variable age is local to the method. While the method is running, the variable age exists within the class. 

Nếu có một biến trong một phương thức, biến bản thân sẽ không hoạt động. Nếu bạn muốn xác định các trường toàn cầu, bạn cần xác định các biến bên ngoài các phương thức lớp. & nbsp; & nbsp;

Tự là một từ khóa trong Python? & Nbsp; 

Có một câu hỏi luôn luôn lơ lửng giữa các lập trình viên Python. Tự thực sự là một từ khóa trong Python? & Nbsp;

Không giống như các ngôn ngữ lập trình khác như C ++, trong đó bản thân được coi là một từ khóa, trong Python, đó là một quy ước mà các lập trình viên có xu hướng tuân theo. Nó về cơ bản là một tham số trong một định nghĩa phương thức. Tuy nhiên, bạn có thể sử dụng bất kỳ tên nào khác thay cho bản thân như một & nbsp; hoặc tôi & nbsp; hoặc bất cứ điều gì khác cho tham số đầu tiên của phương thức. Một lý do khác tại sao nó được đề xuất bởi hầu hết mọi người là nó tăng cường khả năng đọc mã của bạn. & NBSP;another or me or anything else for the first parameter of a method. Another reason why it is suggested by most people is that it enhances the readability of your code. 

Hãy cho chúng tôi xem một ví dụ để hiểu nó: & nbsp;

class myClass:  
def show(another):  
print(“another is used in place of self”)  

Nếu bạn so sánh mã này với mã cho hàm tạo tự cấu trúc lớp Python, bạn sẽ nhận thấy rằng ở đây chúng tôi đã sử dụng tên khác & nbsp; thay cho bản thân. Bây giờ chúng ta hãy tạo một đối tượng của lớp này và xem đầu ra: & nbsp;another in place of self. Now let us create an object of this class and see the output: 

object = myClass()  
object.show()

Một cái khác được sử dụng thay cho bản thân

Bạn có thể thấy rằng chương trình hoạt động ngay cả khi chúng ta sử dụng một số tên khác thay cho biến bản thân. Nó hoạt động chính xác giống như biến bản thân. & NBSP;

Tại sao "tự" nên được sử dụng làm tham số đầu tiên của các phương thức thể hiện trong Python & nbsp; & nbsp; 

Điều này có thể được hiểu bởi ví dụ dưới đây. Chúng tôi có một lớp hình chữ nhật xác định một khu vực phương thức để tính toán khu vực: & nbsp;

class Rectangle (): 
    def __init__(self,x = 0,y = 0): 
        self.x = x 
        self.y = y 
    def area (self): 
        """Find area of rectangle""" 
        return (self.x * self.y) 
rec1=Rectangle(6,10) 
print ("Area is:", rec1.area()) 

Output:   

@staticmethod
def foo():
    print(Foo.foo_string)
0

Trong ví dụ trên, __init __ () & nbsp; xác định ba tham số nhưng chỉ có 2 đối số được truyền (6 và 10). Tương tự, khu vực () & nbsp; yêu cầu một nhưng không có đối số nào được thông qua. & nbsp;__init__() defines three parameters but only 2 arguments are passed (6 and 10). Similarly, area () requires one but no arguments are passed.  

Hình chữ nhật.area & nbsp; và rec1.area & nbsp; trong ví dụ trên là khác nhau và không chính xác như nhau. & Nbsp; and rec1.area in the above example are different and not exactly the same. 

@staticmethod
def foo():
    print(Foo.foo_string)
1

Ở đây, cái đầu tiên là một hàm và cái thứ hai là một phương pháp. Một tính năng độc đáo của Python là bản thân đối tượng được truyền như là đối số đầu tiên cho hàm tương ứng. & NBSP;

Trong ví dụ trên, phương thức gọi: rec1.area () tương đương với: hình chữ nhật.area (rec1). & Nbsp;

Nói chung, khi phương thức được gọi với một số đối số, hàm lớp tương ứng được gọi bằng cách đặt đối tượng của phương thức trước đối số đầu tiên. & nbsp;

Do đó: obj.method (args) trở thành class.method (obj, & nbsp; args). & Nbsp;obj.method(args) becomes Class.method(obj, args)

Đây là lý do tham số đầu tiên của một hàm trong một lớp phải là chính đối tượng. Viết tham số này là bản thân chỉ là một quy ước và không phải là một từ khóa nên nó không có ý nghĩa đặc biệt trong Python. Chúng ta có thể sử dụng các tên khác (như thế này, điều đó) nhưng nó không được ưa thích vì nó làm giảm khả năng đọc mã.

Chúng ta có nên chuyển bản thân cho một phương pháp không? & Nbsp; 

Vì chúng ta có thể sử dụng bất kỳ tên nào khác thay vì sử dụng biến bản thân, thì điều gì sẽ xảy ra nếu chúng ta chỉ chuyển bản thân cho một định nghĩa phương thức. Chúng ta hãy xem xét lớp MyClass & NBSP; chúng ta đã sử dụng trước đó. & nbsp;myClass we have used earlier.  

Một phương thức có tên là một cái gì đó & nbsp; được xác định trong lớp với một tham số khác & nbsp; và hai đối số: & nbsp;something is defined within the class with a parameter another and two arguments: 

@staticmethod
def foo():
    print(Foo.foo_string)
2

Bây giờ, chúng ta hãy khai báo một trường hợp obj & nbsp; của myClass & nbsp; và gọi phương thức một cái gì đó & nbsp; với sự trợ giúp của đối tượng thể hiện: & nbsp;obj of myClass and call the method something with the help of the instance object: 

@staticmethod
def foo():
    print(Foo.foo_string)
3

Python thực hiện một công việc nội bộ trong cuộc gọi phương thức và chuyển đổi nó thành một cái gì đó như thế này: & nbsp;

@staticmethod
def foo():
    print(Foo.foo_string)
4

Điều này cho thấy rằng một biến khác & nbsp; biến (được sử dụng thay cho bản thân) đề cập đến đối tượng thể hiện của lớp. & Nbsp;another variable (used in place of self) refers to the instance object of the class. 

Lưu ý rằng Pass & nbsp; từ khóa được sử dụng trong phương thức một cái gì đó & nbsp; không làm gì cả. Nó được sử dụng như một hình nộm trong các tình huống mà bạn không muốn bất kỳ hoạt động nào được thực hiện nhưng có một yêu cầu cú pháp của một yếu tố lập trình nhất định. & NBSP;pass keyword used in the method something does nothing. It is used as a dummy in situations where you do not want any operation to be performed but there is a syntax requirement of a certain programming element. 

Làm thế nào chúng ta có thể bỏ qua bản thân trong Python? & NBSP; 

Xem xét một tình huống trong đó phương thức thể hiện không cần phải có quyền truy cập vào các biến thể hiện. Trong những trường hợp như vậy, chúng ta có thể xem xét bỏ qua biến bản thân trong các phương pháp xác định. Hãy để chúng tôi hiểu rõ về thực tế với mã ví dụ: & nbsp;

@staticmethod
def foo():
    print(Foo.foo_string)
5

Nếu bạn chạy mã sau, đầu ra sẽ như sau: & nbsp;

Complete 

Chúng tôi đã không tuyên bố biến bản thân ở đây nhưng vẫn không có lỗi trong chương trình và đầu ra xuất hiện tốt. Tuy nhiên, điều gì sẽ xảy ra nếu chúng ta gọi phương thức xe (): & nbsp;Car() method: 

@staticmethod
def foo():
    print(Foo.foo_string)
6

Khi chúng tôi biên dịch mã sau khi gọi phương thức & nbsp; car (), nó sẽ hiển thị một lỗi như thế này: & nbsp; Car() method, it shows an error like this: 

@staticmethod
def foo():
    print(Foo.foo_string)
7

Đầu ra cho thấy một lỗi vì phương thức & nbsp; car () có 0 đối số vị trí nhưng chúng tôi đã đưa ra 1 đối số vị trí cho nó. Điều này là do khi trường hợp obj & nbsp; được tạo, nó sẽ tự động được chuyển làm đối số đầu tiên cho phương thức xe () ngay cả khi chúng ta không tuyên bố biến bản thân. & NBSP; Car() takes 0 positional arguments but we have given 1 positional argument to it. This is because when the instance obj is created, it is automatically passed as the first argument to the method Car() even if we have not declared the self variable. 

Tuy nhiên, nếu bạn cố gắng truy cập vào phương thức phiên bản () & nbsp; với sự trợ giúp của tham chiếu lớp, sẽ không có lỗi và chương trình sẽ hoạt động tốt: & nbsp;Car() with the help of the class reference, there will be no errors and the program will work fine: 

@staticmethod
def foo():
    print(Foo.foo_string)
8

Sự khác biệt giữa bản thân và __init __ & nbsp; & nbsp; 

tự & nbsp;: tự đại diện cho trường hợp của lớp. Bằng cách sử dụng từ khóa "tự", tất cả các thuộc tính và phương thức của lớp Python có thể được truy cập. & NBSP;: self represents the instance of the class. By using the "self" keyword all the attributes and methods of the python class can be accessed. 

__init__: "__init__" là một phương pháp dành riêng 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 định hướng đối tượng. Phương thức này được gọi là khi một đối tượng được tạo từ lớp và cho phép lớp khởi tạo các thuộc tính lớp .. & nbsp; "__init__" is a reserved method in python classes. It is known as a constructor in object oriented concepts. This method is called when an object is created from the class and allows the class to initialize class attributes .. 

Việc sử dụng "bản thân" trong lớp để truy cập các phương thức và thuộc tính: & nbsp;

@staticmethod
def foo():
    print(Foo.foo_string)
9

Output:   

class myClass: 
    def instance_method(self): 
        return “Instance method is called”, self 
0

Chúng tôi đã tạo ra một đối tượng của lớp hình chữ nhật. Trong khi tạo đối tượng hình chữ nhật, chúng tôi đã vượt qua 3 đối số - 40.30.100; & nbsp; tất cả các đối số này được chuyển sang phương thức "__init __" để khởi tạo đối tượng. & Nbsp;– 40,30,100; all these arguments are passed to "__init__"method to initialize the object. 

Ở đây, từ khóa "tự sướng đại diện cho thể hiện của lớp. Nó liên kết các thuộc tính với các đối số đã cho. & Nbsp;"self” represents the instance of the class. It binds the attributes with the given arguments. 

Tự đại diện cho cùng một đối tượng hoặc thể hiện của lớp. Nếu bạn thấy, bên trong phương thức "Khu vực, Self.length" được sử dụng để nhận giá trị của "Độ dài" thuộc tính. Thuộc tính "Độ dài" liên kết với đối tượng (thể hiện của lớp) tại thời điểm tạo đối tượng. "Tự" đại diện cho đối tượng bên trong lớp. "Self" hoạt động giống như "r" trong câu lệnh r = hình chữ nhật (40,30, 100) ". Nếu bạn thấy định nghĩa phương thức" khu vực def (self): ở đây "tự" Phương thức bởi vì bất cứ khi nào chúng ta gọi phương thức, đối tượng (thể hiện của lớp) được tự động truyền dưới dạng đối số đầu tiên cùng với các đối số khác của phương thức. Nếu không có đối số nào khác chỉ được cung cấp "Tự" được chuyển cho phương thức. Đó là lý do "bản thân" được sử dụng để gọi phương thức bên trong lớp ("self.area ()"). Chúng tôi đã sử dụng đối tượng (ví dụ của lớp) để gọi phương thức bên ngoài định nghĩa lớp ("R.area ()"). & nbsp;

"R" là ví dụ của lớp khi phương thức "r.area () được gọi là; trường hợp" r "được chuyển làm đối số đầu tiên ở vị trí của bản thân. & nbsp;

Thực hiện linh tinh của bản thân & nbsp; 

Bây giờ chúng ta hãy thảo luận về một số triển khai linh tinh của biến bản thân. & NBSP;

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

Phương thức lớp là một phương thức bị ràng buộc với lớp. Hãy cho chúng tôi hiểu một phương thức lớp với một ví dụ - & nbsp;

class myClass: 
    def instance_method(self): 
        return “Instance method is called”, self 
1

Hành vi tương tự của biến bản thân cũng có với các phương thức lớp nhưng sự khác biệt duy nhất là đối với các phương thức lớp, quy ước là sử dụng CLS & nbsp; làm tên biến thay vì bản thân. & NBSP;cls as the variable name instead of self. 

Các phương thức lớp lấy tham số CLS & NBSP; thay vì tham số tự. Khi phương thức được gọi, nó chỉ vào lớp. Phương thức lớp không thể sửa đổi trạng thái đối tượng nhưng nó có thể sửa đổi trạng thái lớp của tất cả các trường hợp lớp. & NBSP;cls parameter instead of the self parameter. When the method is called, it points to the class. The class method cannot modify the object state but it can modify the class state of all the class instances. 

Mặt khác, các phương thức tĩnh là các hàm tự cung cấp và loại phương thức này không phải là tự & nbsp; cũng không phải là tham số cls & nbsp;. Hãy cho chúng tôi xem một ví dụ về phương pháp tĩnh - & nbsp;self nor a cls parameter. Let us see an example of a static method – 

class myClass: 
    def instance_method(self): 
        return “Instance method is called”, self 
2

Vì một phương thức tĩnh không chấp nhận bất kỳ tham số nào, chúng không thể sửa đổi trạng thái đối tượng hoặc thậm chí trạng thái lớp. Chúng chủ yếu được sử dụng để đặt tên các phương pháp khác nhau và Python hạn chế chúng trong dữ liệu mà chúng có thể truy cập. & NBSP;

Lưu ý rằng cả hai phương thức ở đây được đánh dấu bằng @ClassMethod và @staticmethod & nbsp; trang trí để gắn cờ nó như một phương thức lớp và phương thức tĩnh tương ứng. & Nbsp;@classmethod and @staticmethod decorators to flag it as a class method and static method respectively. 

Biến bản thân được liên kết với thể hiện hiện tại & nbsp;

Biến bản thân cho phép chúng tôi truy cập các thuộc tính của thể hiện hiện tại. Hãy cho chúng tôi hiểu điều này với một ví dụ - & nbsp;

class myClass: 
    def instance_method(self): 
        return “Instance method is called”, self 
3

Ở đây, chúng tôi có một người lớp & nbsp; với hai phương thức __init__ và Walk & nbsp; được tuyên bố với tham số tự. Chúng tôi đã tạo ra hai trường hợp khác nhau của lớp - obj1 & nbsp; và obj2. & Nbsp; thuộc tính của phương thức ví dụ đi bộ (). & nbsp;Person with two methods __init__ and walk declared with the self parameter. We have created two different instances of the class – obj1 and obj2. When the first instance is revoked, “Alex” is printed with the method walk() whereas when the second instance is revoked, “Charles” gets printed with the properties of the instance method walk(). 

Lời khuyên về biến bản thân Python & NBSP; 

Vì bây giờ chúng tôi đã đạt đến cuối bài viết, hãy để tôi cung cấp cho bạn một số lời khuyên về thời điểm sử dụng và khi nào không sử dụng biến bản thân trong Python. & NBSP;

Sử dụng bản thân khi nào:self when:

  • Bạn xác định một phương thức thể hiện, vì nó được truyền tự động là tham số đầu tiên khi phương thức được gọi;
  • bạn tham chiếu một lớp hoặc một thuộc tính thể hiện từ bên trong một phương thức thể hiện;
  • Bạn muốn tham khảo các biến và phương thức thể hiện từ các phương thức thể hiện khác. & nbsp;

Don Tiết sử dụng bản thân khi: & nbsp;self when: 

  • Bạn muốn gọi một phương thức thể hiện bình thường;
  • tham chiếu một thuộc tính lớp bên trong định nghĩa lớp nhưng ngoài một phương thức thể hiện;
  • Bạn đang ở trong một phương pháp tĩnh. & nbsp;

Conclusion  

Hãy để chúng tôi tóm tắt lại các điểm chính mà chúng tôi đã đề cập trong bài viết này, cụ thể là:

  • Các trường hợp và các lớp trong Python. & Nbsp;
  • Tự biến và tầm quan trọng của nó. & Nbsp;
  • Tính rõ ràng của biến bản thân. & Nbsp;
  • Trình tự xây dựng lớp Python. & NBSP;
  • Vượt qua bản thân như một phương pháp. & Nbsp;
  • Bỏ qua bản thân trong Python. & NBSP;
  • Các biến được sử dụng cho các phương thức lớp và phương thức tĩnh. & Nbsp;
  • Giới hạn bản thân với thể hiện hiện tại. & NBSP;
  • Khi nào nên sử dụng và khi nào không sử dụng bản thân trong Python. & NBSP;

Với kiến ​​thức tốt về biến bản thân trong Python và hoạt động nội bộ của nó ở Python, giờ là lúc cho một số thực hành. Tuy nhiên, nếu bạn muốn biết thêm về bản thân Python, bạn có thể đi ngay vào tài liệu chính thức của Python.

Mã hóa hạnh phúc! & NBSP;

Chúng ta có thể tạo lớp mà không có bản thân trong Python không?

Các phương thức lớp không cần bản thân như một đối số, nhưng chúng cần một tham số gọi là CLS.Điều này là viết tắt của lớp học, và giống như bản thân, được Python tự động vượt qua.Phương pháp lớp được tạo bằng cách sử dụng bộ trang trí @ClassMethod.In ('Xin chào, Thế giới!. This stands for class, and like self, gets automatically passed in by Python. Class methods are created using the @classmethod decorator. print('Hello, World!

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

Đừng sử dụng bản thân khi: bạn muốn gọi một phương thức thể hiện bình thường;tham chiếu một thuộc tính lớp bên trong định nghĩa lớp nhưng ngoài một phương thức thể hiện;Bạn đang ở trong một phương pháp tĩnh.you want to call an instance method normally; referencing a class attribute inside the class definition but outside an instance method; you are inside a static method.

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

Tự là đối số đầu tiên được thông qua trong phương thức xây dựng và thể hiện.Self phải được cung cấp như một tham số đầu tiên cho phương thức thể hiện và hàm tạo.Nếu bạn không cung cấp nó, nó sẽ gây ra lỗi.Self must be provided as a First parameter to the Instance method and constructor. If you don't provide it, it will cause an error.

Chúng ta có thể thay thế bản thân trong Python không?

Tự chỉ là một tham chiếu đến thể hiện hiện tại trong phương thức.Bạn không thể thay đổi thể hiện của mình bằng cách tự đặt bản thân.You can't change your instance by setting self .