__repr__ và str trong trăn

Cả hai phương thức str[] và repr[] trong python đều được sử dụng để biểu diễn chuỗi của một chuỗi. Mặc dù cả hai dường như phục vụ cùng một con nhộng, nhưng có một chút khác biệt giữa chúng

Bạn đã bao giờ để ý điều gì sẽ xảy ra khi bạn gọi hàm str[x] tích hợp sẵn của python trong đó x là bất kỳ đối tượng nào bạn muốn chưa? . __str__ là lựa chọn mặc định và __repr__ là dự phòng

Trước tiên hãy xem tài liệu python nói gì về chúng -

>>> help[str]
Help on class str in module builtins:

class str[object]
| str[object=''] -> str
| str[bytes_or_buffer[, encoding[, errors]]] -> str
|
| Create a new string object from the given object.

>>> help[repr]
Help on built-in function repr in module builtins:

repr[obj, /]
Return the canonical string representation of the object.

For many object types, including most builtins, eval[repr[obj]] == obj.

Bây giờ, hãy cố gắng hiểu hai phương thức này bằng một vài ví dụ

>>> str[123]
'123'
>>> repr[123]
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str['Python']
'Python'
>>> repr['Python']
"'Python'"

Trả về của repr[] và str[] giống nhau đối với giá trị số nguyên, nhưng có sự khác biệt giữa các giá trị trả về cho chuỗi – một giá trị chính thức và giá trị kia là không chính thức

Bây giờ, nếu bạn xem tài liệu chính thức về python - __str__ được sử dụng để tìm biểu diễn chuỗi "không chính thức" [có thể đọc được] của một đối tượng trong khi __repr__ được sử dụng để tìm biểu diễn chuỗi "chính thức" của một đối tượng

Sự khác biệt giữa các biểu diễn chính thức và không chính thức là việc triển khai mặc định __repr__ cho một giá trị str có thể được gọi làm đối số cho eval và giá trị trả về sẽ là một đối tượng chuỗi hợp lệ. Hàm này [repr[]] lấy một chuỗi và đánh giá nội dung của nó dưới dạng mã python

Vì vậy, khi chúng tôi chuyển "'Python'" cho nó, công việc của nó. Tuy nhiên, 'Python' dẫn đến lỗi vì nó được hiểu là biến Python, tất nhiên là không xác định. Dưới đây là mã để hiểu nó -

>>> x = "Python"
>>> repr[x]
"'Python'"
>>> x1 = eval [repr[x]]
>>> x == x1
True

Vì vậy, nếu chúng tôi cố gắng gọi giá trị trả về của __str__ làm đối số cho eval, thì nó không thành công

>>> y = "Python"
>>> str[y]
'Python'
>>> y1 = eval[str[y]]
Traceback [most recent call last]:
File "", line 1, in 
y1 = eval[str[y]]
File "", line 1, in 
NameError: name 'Python' is not defined

Một ví dụ khác để chứng minh sự khác biệt giữa hai là -

>>> import datetime
>>> now = datetime.datetime.now[]
>>> str[now]
'2019-03-29 01:29:23.211924'
>>> repr[now]
'datetime.datetime[2019, 3, 29, 1, 29, 23, 211924]'

Ở kết quả trên, str[now] tính toán một chuỗi chứa giá trị của now trong khi repr[now] trả về mã python cần thiết để xây dựng lại đối tượng now của chúng ta

Bản tóm tắt. trong hướng dẫn này, bạn sẽ học cách sử dụng phương thức

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
0 dunder của Python và sự khác biệt giữa phương thức

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
0 và

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
2

Giới thiệu về phương pháp ma thuật Python

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
0

Phương thức dunder của

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
0 xác định hành vi khi bạn truyền một thể hiện của một lớp cho

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
5

Phương thức

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
0 trả về biểu diễn chuỗi của một đối tượng. Thông thường,

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
7 trả về một chuỗi có thể được thực thi và mang lại giá trị giống như đối tượng

Nói cách khác, nếu bạn chuyển chuỗi trả về của phương thức

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
8 cho hàm

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
9, bạn sẽ nhận được giá trị giống như giá trị của phương thức
>>> str[123]
'123'
>>> repr[123]
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str['Python']
'Python'
>>> repr['Python']
"'Python'"
50. Hãy xem xét một ví dụ

Đầu tiên, định nghĩa lớp

>>> str[123]
'123'
>>> repr[123]
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str['Python']
'Python'
>>> repr['Python']
"'Python'"
51 với ba thuộc tính thể hiện
>>> str[123]
'123'
>>> repr[123]
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str['Python']
'Python'
>>> repr['Python']
"'Python'"
52,
>>> str[123]
'123'
>>> repr[123]
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str['Python']
'Python'
>>> repr['Python']
"'Python'"
53 và
>>> str[123]
'123'
>>> repr[123]
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str['Python']
'Python'
>>> repr['Python']
"'Python'"
54

>>> x = "Python"
>>> repr[x]
"'Python'"
>>> x1 = eval [repr[x]]
>>> x == x1
True
0

Thứ hai, tạo một thể hiện mới của lớp

>>> str[123]
'123'
>>> repr[123]
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str['Python']
'Python'
>>> repr['Python']
"'Python'"
51 và hiển thị biểu diễn chuỗi của nó

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]

đầu ra

>>> str[123]
'123'
>>> repr[123]
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str['Python']
'Python'
>>> repr['Python']
"'Python'"
5

Theo mặc định, đầu ra chứa địa chỉ bộ nhớ của đối tượng

>>> str[123]
'123'
>>> repr[123]
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str['Python']
'Python'
>>> repr['Python']
"'Python'"
56. Để tùy chỉnh biểu diễn chuỗi của đối tượng, bạn có thể triển khai phương thức

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
0 như thế này

>>> x = "Python"
>>> repr[x]
"'Python'"
>>> x1 = eval [repr[x]]
>>> x == x1
True
6

Khi bạn truyền một thể hiện của lớp

>>> str[123]
'123'
>>> repr[123]
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str['Python']
'Python'
>>> repr['Python']
"'Python'"
51 cho lớp

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
5, Python sẽ tự động gọi phương thức

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
0. Ví dụ

>>> y = "Python"
>>> str[y]
'Python'
>>> y1 = eval[str[y]]
Traceback [most recent call last]:
File "", line 1, in 
y1 = eval[str[y]]
File "", line 1, in 
NameError: name 'Python' is not defined
0

đầu ra

>>> y = "Python"
>>> str[y]
'Python'
>>> y1 = eval[str[y]]
Traceback [most recent call last]:
File "", line 1, in 
y1 = eval[str[y]]
File "", line 1, in 
NameError: name 'Python' is not defined
1

Nếu bạn thực thi chuỗi trả về

>>> x = "Python"
>>> repr[x]
"'Python'"
>>> x1 = eval [repr[x]]
>>> x == x1
True
61, nó sẽ trả về đối tượng
>>> str[123]
'123'
>>> repr[123]
'123'
>>> #Above we see- with integer data, there is no difference
>>> #Now let's try string data on these two methods
>>> str['Python']
'Python'
>>> repr['Python']
"'Python'"
56

Khi một lớp không triển khai phương thức

>>> x = "Python"
>>> repr[x]
"'Python'"
>>> x1 = eval [repr[x]]
>>> x == x1
True
63 và bạn chuyển một thể hiện của lớp đó cho
>>> x = "Python"
>>> repr[x]
"'Python'"
>>> x1 = eval [repr[x]]
>>> x == x1
True
64, Python sẽ trả về kết quả của phương thức

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
0 vì bên trong phương thức

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
2 gọi phương thức

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
0

Ví dụ

>>> y = "Python"
>>> str[y]
'Python'
>>> y1 = eval[str[y]]
Traceback [most recent call last]:
File "", line 1, in 
y1 = eval[str[y]]
File "", line 1, in 
NameError: name 'Python' is not defined
9

đầu ra

>>> y = "Python"
>>> str[y]
'Python'
>>> y1 = eval[str[y]]
Traceback [most recent call last]:
File "", line 1, in 
y1 = eval[str[y]]
File "", line 1, in 
NameError: name 'Python' is not defined
1

Nếu một lớp triển khai phương thức

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
2, Python sẽ gọi phương thức

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
2 khi bạn chuyển một thể hiện của lớp đó cho
>>> x = "Python"
>>> repr[x]
"'Python'"
>>> x1 = eval [repr[x]]
>>> x == x1
True
64. Ví dụ

>>> import datetime
>>> now = datetime.datetime.now[]
>>> str[now]
'2019-03-29 01:29:23.211924'
>>> repr[now]
'datetime.datetime[2019, 3, 29, 1, 29, 23, 211924]'
4

đầu ra

>>> import datetime
>>> now = datetime.datetime.now[]
>>> str[now]
'2019-03-29 01:29:23.211924'
>>> repr[now]
'datetime.datetime[2019, 3, 29, 1, 29, 23, 211924]'
5

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
2 so với

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
0

Sự khác biệt chính giữa phương pháp

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
2 và

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
0 là đối tượng dự định

Phương thức

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
2 trả về một biểu diễn chuỗi của một đối tượng mà con người có thể đọc được trong khi phương thức

person = Person['John', 'Doe', 25] print[repr[person]]

Code language: Python [python]
0 trả về một biểu diễn chuỗi của một đối tượng mà máy có thể đọc được

Sự khác biệt giữa STR và REPR là gì?

repr[] tính toán biểu diễn chuỗi “chính thức” của một đối tượng [một biểu diễn có tất cả thông tin về đối tượng] và str[] được sử dụng để tính toán biểu diễn chuỗi “không chính thức” của một đối tượng [một biểu diễn hữu ích cho việc in

__ REPR __ trong Python là gì?

Trong Python, __repr__ là một phương thức đặc biệt được sử dụng để biểu diễn các đối tượng của một lớp dưới dạng một chuỗi. __repr__ được gọi bởi hàm tích hợp repr[]. Bạn có thể định nghĩa biểu diễn chuỗi của riêng mình cho các đối tượng lớp của mình bằng phương thức __repr__. Các phương thức đặc biệt là một tập hợp các phương thức được xác định trước được sử dụng để làm phong phú các lớp của bạn

__ str __ trong Python là gì?

Phương thức __str__ trong Python đại diện cho các đối tượng lớp dưới dạng một chuỗi – nó có thể được sử dụng cho các lớp. Phương thức __str__ nên được định nghĩa theo cách dễ đọc và xuất ra tất cả các thành viên của lớp. Phương thức này cũng được sử dụng như một công cụ sửa lỗi khi cần kiểm tra các thành viên của một lớp

Liệu repr có trả về một chuỗi không?

Hàm repr[] trả về chuỗi đại diện của giá trị được truyền cho hàm eval theo mặc định . Đối với đối tượng lớp tùy chỉnh, nó trả về một chuỗi được đặt trong dấu ngoặc nhọn chứa tên và địa chỉ của đối tượng theo mặc định.

Chủ Đề