Đây là một lớp Python:
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
Nếu chúng ta tạo một thể hiện của lớp này và sau đó xem phiên bản đó từ bản phát hành, chúng ta sẽ thấy biểu diễn chuỗi của đối tượng
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
1 đó:>>> p = Point[1, 2]
>>> p
Biểu diễn chuỗi mặc định cho các phiên bản lớp là không có ích. Tất cả những gì chúng ta thấy là chúng ta có một đối tượng và nó có loại
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
1.Làm thế nào chúng ta có thể làm cho đại diện chuỗi này hữu ích hơn?
Tùy chỉnh biểu diễn chuỗi
Bạn có thể tùy chỉnh biểu diễn chuỗi của các phiên bản lớp bằng cách viết phương thức
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 cho lớp class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
1 của chúng tôi:class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
Bây giờ khi chúng ta xem xét các trường hợp của lớp
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
1 của chúng ta tại Python replin, chúng ta sẽ thấy một cái gì đó trông giống như mã chúng ta đã sử dụng để tạo ra quan điểm của chúng ta:>>> p = Point[1, 2]
>>> p
Point[1, 2]
>>> p.x = 4
>>> p
Point[4, 2]
Nếu chúng ta chuyển đổi các đối tượng
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
1 của mình thành một chuỗi hoặc in chúng, chúng ta cũng sẽ thấy đại diện chuỗi mới của chúng ta:>>> str[p]
'Point[4, 2]'
>>> print[p]
Point[4, 2]
Nếu lớp của bạn không có biểu diễn chuỗi đẹp và bạn muốn tùy chỉnh nó, hãy viết một phương thức
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 thường là cách để thực hiện điều đó.Hai loại biểu diễn chuỗi
Python thực sự có hai biểu diễn chuỗi khác nhau cho tất cả các đối tượng. Một đại diện chuỗi là một biểu diễn có thể đọc được của con người và chuỗi còn lại là người có thể đọc được của lập trình viên.two different string representations for all objects. One string representation is the human-readable one and the other is the programmer-readable one.
Phương thức
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 chỉ định biểu diễn chuỗi có thể đọc được của lập trình viên. Nếu bạn chỉ muốn một đại diện chuỗi, đây là một biểu diễn chỉ định.Biểu diễn chuỗi có thể đọc được của con người được chỉ định bằng phương pháp
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9. Các đối tượng class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
1 của chúng tôi thực sự đã có phương thức class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9:>>> p.__str__[]
'Point[4, 2]'
>>> p.__repr__[]
'Point[4, 2]'
Việc triển khai
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9 mặc định chỉ gọi class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3: def __str__[self]:
return self.__repr__[]
Việc triển khai
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 mặc định trông giống như thế này: def __repr__[self]:
cls = type[self]
return f""
Vì vậy, trừ khi bạn cần một biểu diễn chuỗi thứ hai cho đối tượng của mình, bạn có thể thoát khỏi chỉ bằng cách thực hiện phương thức
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3.Bạn có thể đọc thêm về các biểu diễn hai chuỗi của Python tại đây.
Khi class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 và class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9 được sử dụng
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
Đây là một lớp chỉ định cả hai phương thức
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9 và class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3:class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
def __str__[self]:
return f"Point at [{self.x}, {self.y}]"
Việc gõ tên của đối tượng của chúng tôi tại Python REP sẽ sử dụng phương thức
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 và do đó sẽ gọi rõ ràng chức năng >>> str[p]
'Point[4, 2]'
>>> print[p]
Point[4, 2]
1 tích hợp::>>> p = Point[1, 2]
>>> p
Point[1, 2]
>>> repr[p]
'Point[1, 2]'
In Đối tượng của chúng tôi sẽ sử dụng phương thức
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9 và chức năng >>> str[p]
'Point[4, 2]'
>>> print[p]
Point[4, 2]
3 tích hợp và định dạng chuỗi:>>> p = Point[1, 2]
>>> p
0Phương pháp
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 được sử dụng ở những nơi mà một lập trình viên sẽ xem xét đối tượng này [trong bản sao và đôi khi trong những thứ như tệp nhật ký]. Phương pháp class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9 được sử dụng ở những nơi mà người dùng cuối của mã của chúng tôi có thể đang xem xét một đại diện cho đối tượng của chúng tôi [ví dụ: khi in nó].Khi nào bạn nên viết một phương thức class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9?
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
Nói chung, bạn sẽ chỉ muốn một phương thức
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9 nếu bạn cần hai biểu diễn chuỗi khác nhau cho đối tượng của mình.Nếu bạn viết một phương thức
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9 nhưng không có phương thức class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3:>>> p = Point[1, 2]
>>> p
1Bạn sẽ thấy rằng biểu diễn có thể đọc được của lập trình viên đối tượng của bạn không được tùy chỉnh:
>>> p = Point[1, 2]
>>> p
2Hầu hết thời gian bạn sẽ chỉ cần một biểu diễn chuỗi, vì vậy khi nghi ngờ chỉ cần viết một phương thức
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3.Một ngoại lệ đáng chú ý: Khi bạn kế thừa từ một đối tượng đã triển khai
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 để gọi class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9 [thay vì cách khác, như mặc định] có lẽ bạn sẽ muốn tùy chỉnh phương thức class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9. Một trong số ít những nơi tôi đã thấy điều này trong Python là trong khung web Django. Các mô hình Django tùy chỉnh hai phương thức này để class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 dựa vào class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9, vì vậy hầu như bạn sẽ luôn muốn chỉ định phương thức class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9 trên các mô hình Django của bạn nhưng không phải là phương thức class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3.Những đối tượng thực sự có hai biểu diễn chuỗi?
Hầu hết các đối tượng trong Python chỉ có một đại diện chuỗi.
Khi bạn in một danh sách [đại diện có thể đọc được của con người], bạn sẽ thấy điều tương tự như khi bạn tham khảo danh sách tại bản phát [đại diện có thể đọc được của lập trình viên]:
>>> p = Point[1, 2]
>>> p
3Số nguyên và số điểm nổi cũng chỉ có một đại diện chuỗi:
>>> p = Point[1, 2]
>>> p
4Danh sách, bộ dữ liệu, bộ, từ điển, số nguyên, số điểm nổi, booleans và
>>> p.__str__[]
'Point[4, 2]'
>>> p.__repr__[]
'Point[4, 2]'
8 đều chỉ có một đại diện chuỗi: một đại diện có thể đọc được của lập trình viên.Trong thư viện tiêu chuẩn Python, bạn sẽ tìm thấy một số đối tượng có hai biểu diễn chuỗi. Ví dụ: các đối tượng
>>> p.__str__[]
'Point[4, 2]'
>>> p.__repr__[]
'Point[4, 2]'
9 và def __str__[self]:
return self.__repr__[]
0 trong mô -đun >>> p.__str__[]
'Point[4, 2]'
>>> p.__repr__[]
'Point[4, 2]'
9 có hai biểu diễn chuỗi:>>> p = Point[1, 2]
>>> p
5Và ban đầu nó có vẻ không giống như vậy, nhưng các chuỗi thực sự có hai biểu diễn chuỗi. Việc tham chiếu một chuỗi tại bản phát lại và gọi
>>> str[p]
'Point[4, 2]'
>>> print[p]
Point[4, 2]
3 trên chuỗi dường như có thể làm điều tương tự:>>> p = Point[1, 2]
>>> p
6Nhưng nếu bạn in chuỗi, bạn sẽ thấy rằng có một sự khác biệt:
>>> p = Point[1, 2]
>>> p
7Biểu diễn có thể đọc được của con người cho các chuỗi không có trích dẫn nhưng người lập trình có thể đọc được:
>>> p = Point[1, 2]
>>> p
8Sự khác biệt này rõ ràng hơn với các chuỗi có ký tự thoát trong đó:
>>> p = Point[1, 2]
>>> p
9Vì vậy, làm thế nào để tôi tạo một đại diện chuỗi cho lớp của tôi?
Câu trả lời dễ dàng là thực hiện một phương thức
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 vì hầu hết các lớp trong Python chỉ nên có một đại diện chuỗi phổ quát.make a class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 method because most classes in Python should have just one universal string
representation.Mặc dù có hai phương thức cho các biểu diễn chuỗi trong Python [
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9 và class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3], phương thức class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9 gọi class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 theo mặc định, vì vậy nếu bạn sẽ chỉ tạo một đại diện cho một chuỗi cho lớp của bạn, class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 là phương pháp bạn đang tìm kiếm.just one string representation for your class the class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 is the method you're looking for.class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
0Vẫn không chắc bạn nhận được nó? Đọc thêm về
class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
3 và class Point:
def __init__[self, x, y]:
self.x = x
self.y = y
def __repr__[self]:
return f"Point[{self.x}, {self.y}]"
9 tại đây.