__repr__ python geeksforgeek

Ở đây, chúng tôi gán một giá trị

repr(obj)
1 cho var. Sau đó, hàm repr() trả về
repr(obj)
3,
repr(obj)
1 bên trong dấu ngoặc kép

Show

Khi kết quả từ repr() được truyền cho

repr(obj)
6, chúng ta sẽ nhận được đối tượng ban đầu (cho nhiều loại)

Từ kết quả đầu ra của đoạn chương trình ví dụ trên, chúng ta có thể thấy rằng nếu chúng ta sử dụng hàm repr() để vào chuỗi ra, thì chuỗi được đưa vào ra sẽ được bao bọc trong một đơn nháy nháy đơn (

Có thể liệt kê các điểm khác biệt giữa hàm str() và hàm repr() là

– str() được sử dụng để tạo dữ liệu đầu ra dành cho người dùng cuối, trong khi hàm repr() được sử dụng chủ yếu cho việc gỡ lỗi và phát triển phần mềm. Mục tiêu của hàm repr() là không rõ ràng, còn mục tiêu của hàm str() là để đưa ra một kết quả có thể đọc được, Ví dụ, nếu chúng ta nghi ngờ một số kiểu float đang tàng trữ một lỗi nhỏ về

– Hàm repr() sẽ tính toán dạng thức thức chuỗi “chính thức” của một đối tượng (một dạng thức chứa tất cả các thông tin về đối tượng), còn hàm str() thì được sử dụng để tính toán dạng thức

– Câu lệnh print và hàm str() được tích hợp sẵn trong Python sử dụng __str__ để hiển thị biểu thức biểu diễn theo kiểu chuỗi của đối tượng, trong khi hàm repr() sẽ sử dụng __repr__ để hiển thị đối tượng

Để có thể hiểu được những điều trên, chúng ta cùng theo dõi ví dụ sau

import datetime 
today = datetime.datetime.now() 
  
# Prints readable format for date-time object 
print str(today) 
  
# prints the official format of date-time object 
print repr(today) 

Kết quả trong ra là

2016-02-22 19:32:04.078030
datetime.datetime(2016, 2, 22, 19, 32, 4, 78030)

Hàm str() hiển thị thông tin “ngày” của hôm nay theo một cách mà người dùng có thể hiển thị cả ngày và giờ hiện tại là bao nhiêu

Hàm repr() sẽ ở dạng biểu diễn “chính thức” của một đối tượng ngày-giờ (đối tượng ngày-giờ) (nghĩa là bằng cách sử dụng biểu thức biểu thức theo kiểu chuỗi “chính thức”, chúng ta có thể tái tạo lại

3. Làm thế nào để sử dụng chúng bên trong các lớp do người dùng định nghĩa?

Một lớp do người dùng tự định nghĩa cũng nên có một hàm __repr__ nếu họ muốn có được các thông tin công cụ có thể phục vụ cho công việc gỡ lỗi. Và nếu bạn nghĩ rằng công việc có một phiên bản thông tin biểu diễn theo kiểu chuỗi sẽ hữu ích cho người dùng, thì chúng ta nên tạo ra một hàm __str__ nữa

Dưới đây là đoạn chương trình Python mô tả cách viết hàm__repr__ và hàm __str__ cho một lớp do người dùng tự định nghĩa

# -----------------------------------------------------------
#Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
#@author cafedevn
#Contact: [email protected]
#Fanpage: https://www.facebook.com/cafedevn
#Group: https://www.facebook.com/groups/cafedev.vn/
#Instagram: https://instagram.com/cafedevn
#Twitter: https://twitter.com/CafedeVn
#Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
#Pinterest: https://www.pinterest.com/cafedevvn/
#YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
# -----------------------------------------------------------

# Python program to demonstrate writing of __repr__ and 
# __str__ for user defined classes 
  
# A user defined class to represent Complex numbers 
class Complex: 
  
    # Constructor 
    def __init__(self, real, imag): 
       self.real = real 
       self.imag = imag 
  
    # For call to repr(). Prints object's information 
    def __repr__(self): 
       return 'Rational(%s, %s)' % (self.real, self.imag)     
  
    # For call to str(). Prints readable form 
    def __str__(self): 
       return '%s + i%s' % (self.real, self.imag)     
  
  
# Driver program to test above 
t = Complex(10, 20) 
  
print str(t)  # Same as "print t" 
print repr(t) 

Kết quả trong ra là

10 + i20
Rational(10, 20)

Nguồn và Tài liệu tiếng anh tham khảo

  • w3school
  • con trăn. tổ chức
  • chuyên viên máy tính

Tài liệu từ cafedev

  • Trọn bộ tự học Python từ cơ bản tăng cao tại đây nha
  • Ebook về python tại đây
  • Các chuỗi tự học lập trình khác nhau

Nếu thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa

Python nói “__repr__” được sử dụng để lấy biểu diễn chuỗi của đối tượng trong khi __str__” được sử dụng để tìm biểu diễn chuỗi “không chính thức” của một đối tượng. Nhưng, tại sao chúng ta cần hai đại diện khác nhau?

Giả sử chúng ta đang làm việc với mã. Chúng tôi đã giới thiệu một lớp có tên là “Animal” và chúng tôi đã xây dựng một đối tượng “a” cho nó

Bây giờ, khi chương trình này chạy, nó sẽ trả về một cái gì đó không thể đọc được như thế này

________số 8_______

Cách giải quyết chung cho vấn đề này là chúng ta gọi trực tiếp các thuộc tính của lớp và nhận kết quả là “Dog” và “Pomeranian” trong trường hợp của chúng ta

print(a.animal)
print(a.name)

Nhưng trên thực tế, có một quy ước trong Python xử lý tất cả đoạn mã “in” ở trên mà chúng tôi đã viết. Tôi muốn giải thích cách nó hoạt động và cách __repr__ và __str__ hoạt động. Đây cũng là một trong những câu hỏi được hỏi nhiều nhất trong các cuộc phỏng vấn. Vậy nên hãy chờ trong giây lát

__str__

Hãy học cùng lớp Động vật để làm mọi thứ dễ dàng hơn. Vì vậy, tôi vừa thêm một phương thức str dunder trong lớp

Về cơ bản những gì phương thức dunder của tôi làm ở đây là bất cứ khi nào chúng ta gọi lớp, nó sẽ trả về cho chúng ta một đầu ra chuỗi “A Pomeranian Dog” thay vì id đối tượng trong bộ nhớ

Tuy nhiên, nếu bạn chỉ kiểm tra đối tượng, bạn vẫn sẽ nhận được địa chỉ bộ nhớ

Vì vậy, kiểm tra đối tượng Animal vẫn cung cấp địa chỉ bộ nhớ nhưng khi chúng tôi in đối tượng, chúng tôi nhận được một kết quả khác dựa trên phương thức __str__

Vì vậy, để khắc phục điều này, bạn cũng có thể làm một cái gì đó như thế này

Nó cũng sẽ trả lại cho bạn đầu ra chuỗi. Về cơ bản, bạn đang buộc một đối tượng chuyển đổi thành chuỗi. Và, nó sẽ gọi phương thức dunder str để làm điều đó

__repr__

Chúng tôi vừa biết về __str__. Bây giờ, cái thứ hai được gọi là __repr__. Hãy hiểu nó khác với __str__ như thế nào

Đoạn mã dưới đây sẽ giúp bạn hiểu toàn bộ kịch bản của __str__ và __repr__ xảy ra bí mật

Khi chúng ta vừa kiểm tra đối tượng, __repr__ được gọi trong khi khi chúng ta sử dụng phương thức in, __str__ được gọi

Trong một ví dụ khác, tôi đã gọi cả hai phương thức “str” và “repr” trên một đối tượng datetime

Sử dụng str đã chuyển đổi đối tượng thành chuỗi và làm cho nó có thể đọc được. Mặc dù repr phải rõ ràng và có nhiều ý nghĩa hơn cho việc gỡ lỗi và sử dụng nội bộ

Phần kết luận

__str__ hoặc str() được sử dụng để tạo đầu ra mà con người có thể đọc được phải dành cho người dùng cuối. Nhưng, repr() hoặc __repr__ phải phục vụ mục đích gỡ lỗi và phát triển