Hướng dẫn how to use __str__ in python - cách sử dụng __str__ trong python

Trong bài học này, bạn sẽ thấy một cách pythonic để chuyển đổi các đối tượng Python thành các chuỗi bằng cách sử dụng __str__. Bạn cũng sẽ học được ý nghĩa của __str__ và cũng học cách sử dụng nó trong một lớp Python:

class Car:
    def __init__(self, color, mileage):
        self.color = color
        self.mileage = mileage

    def __str__(self):
        return 'a {self.color} car'.format(self=self)

00:00 Được rồi. Vì vậy, để dễ dàng vào điều này với một ví dụ đơn giản, tôi đã lấy cùng một lớp Car và tôi đã thêm một phương thức .__str__() ở đây. Vì vậy, các phương pháp Dunder là các phương pháp bắt đầu với một dấu gạch dưới gấp đôi (____ 6), chỉ có loại được rút ngắn thành Dunder. Okay. So, to ease into this with a simple example, I took the same Car class and I added a .__str__() method here. So, the dunder methods are methods that start with a double underscore (__)—it’s just kind of been shortened to dunder.

00:14 Một số người gọi họ là phương pháp ma thuật, rất nhiều người không thích điều đó bởi vì họ không thực sự được coi là phép thuật theo bất kỳ cách nào. Họ chỉ là một hội nghị Python. Và Dunder, hoặc Double Undercore (__), đánh dấu chúng là một điều Python cốt lõi, vì vậy các lớp không được cho là thực sự xác định các phương pháp Dunder của riêng họ vì nó có thể mâu thuẫn với các tính năng của Python trong tương lai. Some people refer to them as magic methods—a lot of people don’t like that because they’re not really supposed to be magical in any way. They’re just supposed to be, well, a Python convention. And the dunder, or the double underscore (__), marks them as a core Python thing, so classes are not supposed to actually define their own dunder methods because it could conflict with Python features in the future.

00:37 Và vì vậy đây chỉ là một cách để loại không gian tên này một chút, chỉ bằng một quy ước đặt tên, giữ chúng tách biệt một chút, giống như phương pháp .__init__(). And so this is just a way to kind of namespace these things a little bit, just by a naming convention, kind of keeping them separate a little bit, just like the .__init__() method.

00:47 Nhưng bạn biết người phụ nữ ở đây. Vì vậy, những gì tôi đã làm ở đây là tôi đã thêm một phương pháp .__str__(). Và về cơ bản, những gì tôi đã làm ở đây, bất cứ khi nào phương pháp đó được gọi, nó chỉ trả lại

return 'a {} car'.format(self.color)
0 của Car và loại cho chúng ta biết rằng đó là một Car. But you know—total sidetrack here. So what I’ve done here is I added a .__str__() method. And basically what I did here—whenever that method is called, it just returns the
return 'a {} car'.format(self.color)
0 of the Car and kind of tells us it’s a Car.

01:00 Vì vậy, chỉ để cho bạn thấy một ví dụ ở đây, một lần nữa, tôi sẽ tạo ra So just to show you an example here—again, I’m going to create

01:05 Cùng Car. Và bây giờ khi tôi in cái này Car the same Car. And now when I print this Car

01:12 Tôi thực sự nhận được một kết quả hoàn toàn khác, phải không? Vì vậy, lần này tôi nhận được ____ 15, đó là kết quả của phương pháp .__str__() này thay vì chuỗi điên này với địa chỉ đối tượng trong bộ nhớ. Tuy nhiên, khi tôi chỉ kiểm tra đối tượng này, tôi vẫn nhận được địa chỉ bộ nhớ trong kết quả trước đó. I actually get a completely different result, right? So this time I get

return 'a {} car'.format(self.color)
5—which is the result of this .__str__() method—instead of this crazy string with the object address in memory. However, when I just inspect this object, I still get the memory address in the previous result.

01:30 Vì vậy, kiểm tra đối tượng Car vẫn cho kết quả tương tự, nhưng khi tôi in đối tượng Car, tôi đã nhận được kết quả khác nhau dựa trên phương thức .__str__(). So, inspecting the Car object still gives the same result, but when I printed the Car object, I got this different result based on the .__str__() method.

01:42 Cách bạn thực sự sẽ chuyển đổi một đối tượng thành chuỗi The way you would actually convert an object to string—if you wanted to force that or make that happen—

01:50 Bạn sẽ chỉ sử dụng phương thức __str__0 tích hợp, và sau đó đó là nội bộ sẽ làm điều đúng đắn và gọi phương thức .__str__(), và nó sẽ cung cấp cho bạn kết quả đúng. you would just use the built-in __str__0 method, and then that is internally going to do the right thing and call the .__str__() method, and it’s going to give you back the right result.

02:01 Bây giờ, tất cả các chức năng này liên quan đến các biểu diễn văn bản cho các đối tượng, như hàm __str__2, chúng sẽ làm điều đó trong nội bộ. Now, all of these functions that deal with text representations for objects, like the __str__2 function—they are going to do that internally.

02:09 Họ sẽ gọi chức năng __str__0 cho bạn. Và nó sẽ giống nhau với một chuỗi định dạng, ví dụ. Vì vậy, nếu bạn làm điều này, thì điều này cũng sẽ gọi .__str__() và chỉ cho bạn kết quả. They’re going to call the __str__0 function for you. And it would be the same with a format string, for example. So if you do this, then this would also call .__str__() and just give you the result.

02:20 Nhưng điều quan trọng là ở đây là theo quy ước, nếu bạn thêm một phương thức .__str__(), thì nó sẽ làm rất nhiều điều tốt cho bạn trong việc kiểm soát cách đối tượng của bạn được biểu diễn dưới dạng chuỗi. Vì vậy, nó là cách Pythonic để làm điều này, đó là loại Chén Thánh, phải không? Bây giờ, những gì bạn đã thấy ở đây là khi tôi kiểm tra đối tượng __str__6 trong bảng điều khiển, tôi vẫn nhận được kết quả tương tự. But the key thing is here that by convention, if you add a .__str__() method, then it’s going to do a lot of good for you in controlling how your object is represented as a string. So it’s the Pythonic way to do this, which is kind of the Holy Grail, right? Now, still what you’re seeing here was that when I inspected the __str__6 object in the console, I still got the same result.

02:46 Vì vậy, dường như có những cách khác nhau để chuyển đổi các đối tượng của bạn thành chuỗi. Người đầu tiên chúng tôi vừa biết về nó, nó có tên là Dunder .__str__(). So there seems to be different ways to convert your objects into strings. The first one we just learned about—it’s called dunder .__str__().

02:55 Và bây giờ cái thứ hai được gọi là Dunder __str__8. Hãy để nói về những gì __str__8 làm và nó khác với .__str__() như thế nào. And now the second one is called dunder __str__8. Let’s talk about what __str__8 does and how it’s different to .__str__().

Hướng dẫn how to use __str__ in python - cách sử dụng __str__ trong python

Tôi chỉ muốn giữ nó theo cách thời trang cũ:

return 'a {} car'.format(self.color)

Hướng dẫn how to use __str__ in python - cách sử dụng __str__ trong python

Còn __str__1 thì sao? 😃

Hướng dẫn how to use __str__ in python - cách sử dụng __str__ trong python

@Rms hahah Nice, hadn đã nghe thấy điều đó trước đây: D Nó là một sự kết hợp hoàn hảo. Kiểm dịch Corona, mã hóa Python và xem lại văn phòng

Phần (self = self) từ dòng mã bên dưới khiến tôi bối rối. Những gì logic đằng sau nó? Đối với phần của tôi, tôi thích sử dụng dây F cho định dạng chuỗi.

def str (self): return a {self.color} car.str(self): return ‘a {self.color} car’.format(self=self)

Phương pháp __ __ trong Python là gì?

__NENTER__ và __exit__ các phương thức được sử dụng với khối 'với' trong Python. Phương thức __call__ được sử dụng để sử dụng đối tượng làm phương thức. Phương thức __iter__ được sử dụng để tạo các đối tượng tạo bằng cách sử dụng đối tượng.__call__ method is used to use the object as a method. __iter__ method is used to generate generator objects using the object.

Làm thế nào để __ Thêm __ hoạt động trong Python?

Phương thức __ADD __ () trong Python chỉ định những gì xảy ra khi bạn gọi + trên hai đối tượng.Khi bạn gọi OBJ1 + OBJ2, về cơ bản bạn đang gọi OBJ1.__add __ (OBJ2).Điều này hoạt động, bởi vì INT thực hiện phương thức __ADD __ () đằng sau hậu trường.specifies what happens when you call + on two objects. When you call obj1 + obj2, you are essentially calling obj1. __add__(obj2). This works, because int implements the __add__() method behind the scenes.

Làm thế nào để bạn gọi một chuỗi trong Python?

Cú pháp.Phương thức Python __str__ trả về một biểu diễn chuỗi của đối tượng mà nó được gọi là.Ví dụ: nếu bạn gọi print (x) một đối tượng x, python gọi nội bộ x.__str __ () để xác định biểu diễn chuỗi của đối tượng x.The Python __str__ method returns a string representation of the object on which it is called. For example, if you call print(x) an object x , Python internally calls x. __str__() to determine the string representation of object x .

__ int __ trong Python là gì?

Phương thức __INT__ được gọi để thực hiện hàm int tích hợp.Phương thức __index__ thực hiện chuyển đổi loại thành int khi đối tượng được sử dụng trong biểu thức lát cắt và các hàm hex, OCT và bin tích hợp.to implement the built-in int function. The __index__ method implements type conversion to an int when the object is used in a slice expression and the built-in hex , oct , and bin functions.