Hướng dẫn __repr__ and __str__ in python - __repr__ và __str__ trong python

Sự khác biệt giữa __str__ và def __repr__(self): return '<{0}.{1} object at {2}>'.format( type(self).__module__, type(self).__qualname__, hex(id(self))) 0 trong Python là gì?

__str__ (đọc là chuỗi "Dunder (Double-Underscore)") và

def __repr__(self):
    return '<{0}.{1} object at {2}>'.format(
      type(self).__module__, type(self).__qualname__, hex(id(self)))
0 (đọc là "dunder-reper" (cho "biểu diễn")) là cả hai phương pháp đặc biệt trả về chuỗi dựa trên trạng thái của đối tượng.

def __repr__(self):
    return '<{0}.{1} object at {2}>'.format(
      type(self).__module__, type(self).__qualname__, hex(id(self)))
0 cung cấp hành vi sao lưu nếu thiếu __str__.

Vì vậy, trước tiên người ta nên viết một

def __repr__(self):
    return '<{0}.{1} object at {2}>'.format(
      type(self).__module__, type(self).__qualname__, hex(id(self)))
0 cho phép bạn khôi phục một đối tượng tương đương từ chuỗi mà nó trả về, ví dụ: Sử dụng
def __repr__(self):
    return '<{0}.{1} object at {2}>'.format(
      type(self).__module__, type(self).__qualname__, hex(id(self)))
6 hoặc bằng cách gõ nó vào ký tự cho ký tự trong vỏ python.

Bất cứ lúc nào sau đó, người ta có thể viết __str__ cho biểu diễn chuỗi có thể đọc được của người dùng, khi người ta tin rằng nó là cần thiết.

__str__

Nếu bạn in một đối tượng hoặc chuyển nó sang

def __repr__(self):
    return '<{0}.{1} object at {2}>'.format(
      type(self).__module__, type(self).__qualname__, hex(id(self)))
9,
<__main__.Foo object at 0x7f80665abdd0>
0 hoặc
<__main__.Foo object at 0x7f80665abdd0>
1, thì nếu phương thức __str__ được xác định, phương thức đó sẽ được gọi, nếu không, sẽ được sử dụng.

def __repr__(self): return '<{0}.{1} object at {2}>'.format( type(self).__module__, type(self).__qualname__, hex(id(self))) 0

Phương pháp

def __repr__(self):
    return '<{0}.{1} object at {2}>'.format(
      type(self).__module__, type(self).__qualname__, hex(id(self)))
0 được gọi bởi hàm tích hợp
<__main__.Foo object at 0x7f80665abdd0>
6 và là những gì được lặp lại trên vỏ trăn của bạn khi nó đánh giá một biểu thức trả về một đối tượng.

Vì nó cung cấp một bản sao lưu cho __str__, nếu bạn chỉ có thể viết một

Đây là trợ giúp tích hợp trên

<__main__.Foo object at 0x7f80665abdd0>
6:

repr(...)
    repr(object) -> string
    
    Return the canonical string representation of the object.
    For most object types, eval(repr(object)) == object.

Đó là, đối với hầu hết các đối tượng, nếu bạn nhập những gì được in bởi

<__main__.Foo object at 0x7f80665abdd0>
6, bạn sẽ có thể tạo một đối tượng tương đương. Nhưng đây không phải là việc thực hiện mặc định.

Thực hiện mặc định của def __repr__(self): return '<{0}.{1} object at {2}>'.format( type(self).__module__, type(self).__qualname__, hex(id(self))) 0

Đối tượng mặc định

def __repr__(self):
    return '<{0}.{1} object at {2}>'.format(
      type(self).__module__, type(self).__qualname__, hex(id(self)))
0 là (c python nguồn) một cái gì đó như:

def __repr__(self):
    return '<{0}.{1} object at {2}>'.format(
      type(self).__module__, type(self).__qualname__, hex(id(self)))

Điều đó có nghĩa là theo mặc định, bạn sẽ in mô -đun đối tượng đến từ tên lớp và biểu diễn thập lục phân của vị trí của nó trong bộ nhớ - ví dụ::

<__main__.Foo object at 0x7f80665abdd0>

Thông tin này không hữu ích lắm, nhưng không có cách nào để có được cách người ta có thể tạo chính xác một đại diện kinh điển của bất kỳ trường hợp nào, và nó tốt hơn là không có gì, ít nhất là cho chúng ta biết làm thế nào chúng ta có thể xác định duy nhất trong bộ nhớ.

Làm thế nào def __repr__(self): return '<{0}.{1} object at {2}>'.format( type(self).__module__, type(self).__qualname__, hex(id(self))) 0 có thể hữu ích?

Chúng ta hãy xem nó có thể hữu ích như thế nào, sử dụng các đối tượng Python và

import datetime
4. Đầu tiên chúng ta cần nhập mô -đun
import datetime
4:

import datetime

Nếu chúng ta gọi

import datetime
6 trong shell, chúng ta sẽ thấy mọi thứ chúng ta cần để tạo lại một đối tượng DateTime tương đương. Điều này được tạo bởi DateTime
def __repr__(self):
    return '<{0}.{1} object at {2}>'.format(
      type(self).__module__, type(self).__qualname__, hex(id(self)))
0:

>>> datetime.datetime.now()
datetime.datetime(2015, 1, 24, 20, 5, 36, 491180)

Nếu chúng ta in một đối tượng DateTime, chúng ta sẽ thấy một định dạng tốt của con người (trên thực tế, ISO). Điều này được triển khai bởi DateTime's __str__:

>>> print(datetime.datetime.now())
2015-01-24 20:05:44.977951

Đó là một vấn đề đơn giản để tạo lại đối tượng chúng tôi đã mất vì chúng tôi đã không gán nó cho một biến bằng cách sao chép và dán từ đầu ra ____10, sau đó in nó, và chúng tôi có được nó trong cùng một đầu ra có thể đọc được của con người như đối tượng khác:

>>> the_past = datetime.datetime(2015, 1, 24, 20, 5, 36, 491180)
>>> print(the_past)
2015-01-24 20:05:36.491180

#Làm thế nào để tôi thực hiện chúng?

Khi bạn đang phát triển, bạn sẽ muốn có thể tái tạo các đối tượng trong cùng một trạng thái, nếu có thể. Ví dụ, đây là cách đối tượng DateTime xác định

def __repr__(self):
    return '<{0}.{1} object at {2}>'.format(
      type(self).__module__, type(self).__qualname__, hex(id(self)))
0 (nguồn Python). Nó khá phức tạp, vì tất cả các thuộc tính cần thiết để sao chép một đối tượng như vậy:

def __repr__(self):
    """Convert to formal string, for repr()."""
    L = [self._year, self._month, self._day,  # These are never zero
         self._hour, self._minute, self._second, self._microsecond]
    if L[-1] == 0:
        del L[-1]
    if L[-1] == 0:
        del L[-1]
    s = "%s.%s(%s)" % (self.__class__.__module__,
                       self.__class__.__qualname__,
                       ", ".join(map(str, L)))
    if self._tzinfo is not None:
        assert s[-1:] == ")"
        s = s[:-1] + ", tzinfo=%r" % self._tzinfo + ")"
    if self._fold:
        assert s[-1:] == ")"
        s = s[:-1] + ", fold=1)"
    return s

Nếu bạn muốn đối tượng của bạn có một đại diện dễ đọc hơn của con người, bạn có thể thực hiện __str__ tiếp theo. Dưới đây là cách đối tượng DateTime (nguồn Python) thực hiện __str__, mà nó dễ dàng thực hiện vì nó đã có chức năng để hiển thị nó ở định dạng ISO:

def __str__(self):
    "Convert to string, for str()."
    return self.isoformat(sep=' ')

Đặt >>> datetime.datetime.now() datetime.datetime(2015, 1, 24, 20, 5, 36, 491180) 3?

Đây là một bài phê bình về một câu trả lời khác ở đây cho thấy thiết lập

>>> datetime.datetime.now()
datetime.datetime(2015, 1, 24, 20, 5, 36, 491180)
3.

Cài đặt

>>> datetime.datetime.now()
datetime.datetime(2015, 1, 24, 20, 5, 36, 491180)
3 thật ngớ ngẩn -
def __repr__(self):
    return '<{0}.{1} object at {2}>'.format(
      type(self).__module__, type(self).__qualname__, hex(id(self)))
0 là một dự phòng cho __str__
def __repr__(self):
    return '<{0}.{1} object at {2}>'.format(
      type(self).__module__, type(self).__qualname__, hex(id(self)))
0, được viết cho các nhà phát triển sử dụng trong gỡ lỗi, nên được viết trước khi bạn viết __str__.

Bạn chỉ cần __str__ khi bạn cần biểu diễn văn bản của đối tượng.

Sự kết luận

Xác định

def __repr__(self):
    return '<{0}.{1} object at {2}>'.format(
      type(self).__module__, type(self).__qualname__, hex(id(self)))
0 cho các đối tượng bạn viết để bạn và các nhà phát triển khác có một ví dụ có thể tái tạo khi sử dụng nó khi bạn phát triển. Xác định __str__ Khi bạn cần một đại diện chuỗi có thể đọc được của con người.

Sự khác biệt giữa repr và str trong python 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 để in sự vật).

Phương thức __ repr __ trong Python là gì?

Chức năng Python __repr __ () trả về biểu diễn đối tượng trong định dạng chuỗi.Phương thức này được gọi khi hàm repr () được gọi trên đối tượng.Nếu có thể, chuỗi được trả về phải là biểu thức Python hợp lệ có thể được sử dụng để tái tạo lại đối tượng.returns the object representation in string format. This method is called when repr() function is invoked on the object. If possible, the string returned should be a valid Python expression that can be used to reconstruct the object again.

Mục đích của việc xác định các hàm __ str __ và __ repr __ trong một lớp làm thế nào hai hàm khác nhau?

__str__ được sử dụng để hiển thị biểu diễn chuỗi của đối tượng của bạn để dễ dàng đọc bởi người khác.__repr__ được sử dụng để hiển thị biểu diễn chuỗi của đối tượng.

__ 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 chuỗi - nó có thể được sử dụng cho các lớp.Phương pháp __str__ nên được xác định theo cách dễ đọc và xuất ra tất cả các thành viên của lớp.Phương pháp này cũng được sử dụng như một công cụ gỡ lỗi khi các thành viên của một lớp cần được kiểm tra.