__repr__(self)
时间: 2023-11-01 09:08:40 浏览: 73
在Python中,__repr__(self)是一个特殊方法,用于返回对象的字符串表示形式。它通常被用于调试和日志记录的目的。当你在控制台中打印一个对象时,它会自动调用对象的__repr__()方法来获取字符串表示形式。
在给定的代码示例中,__repr__(self)方法被重写为返回一个自定义的描述字符串。当你打印一个Person对象时,它会显示为"Person类,有name和age两个属性"。这样做可以提供一个更加有意义和可读性的对象表示形式。
相关问题
class Dog6: def __init__(self, initial_name): self._name = initial_name def get_self(self): return self def __str__(self): # # Implement this! # return __ def __repr__(self): return "<Dog named '" + self._name + "'>" def test_inside_a_method_self_refers_to_the_containing_object(self): fido = self.Dog6("Fido") self.assertEqual(__, fido.get_self()) # Not a string! def test_str_provides_a_string_version_of_the_object(self): fido = self.Dog6("Fido") self.assertEqual("Fido", str(fido)) def test_str_is_used_explicitly_in_string_interpolation(self): fido = self.Dog6("Fido") self.assertEqual(__, "My dog is " + str(fido)) def test_repr_provides_a_more_complete_string_version(self): fido = self.Dog6("Fido") self.assertEqual(__, repr(fido)) def test_all_objects_support_str_and_repr(self): seq = [1, 2, 3] self.assertEqual(__, str(seq)) self.assertEqual(__, repr(seq)) self.assertEqual(__, str("STRING")) self.assertEqual(__, repr("STRING"))
Here is the completed code with the missing parts:
```
class Dog6:
def __init__(self, initial_name):
self._name = initial_name
def get_self(self):
return self
def __str__(self):
return self._name
def __repr__(self):
return "<Dog named '" + self._name + "'>"
def test_inside_a_method_self_refers_to_the_containing_object(self):
fido = Dog6("Fido")
self.assertEqual(fido, fido.get_self()) # Not a string!
def test_str_provides_a_string_version_of_the_object(self):
fido = Dog6("Fido")
self.assertEqual("Fido", str(fido))
def test_str_is_used_explicitly_in_string_interpolation(self):
fido = Dog6("Fido")
self.assertEqual("My dog is Fido", "My dog is " + str(fido))
def test_repr_provides_a_more_complete_string_version(self):
fido = Dog6("Fido")
self.assertEqual("<Dog named 'Fido'>", repr(fido))
def test_all_objects_support_str_and_repr(self):
seq = [1, 2, 3]
self.assertEqual("[1, 2, 3]", str(seq))
self.assertEqual("[1, 2, 3]", repr(seq))
self.assertEqual("STRING", str("STRING"))
self.assertEqual("'STRING'", repr("STRING"))
```
Note that in `test_str_is_used_explicitly_in_string_interpolation`, the expected output is `"My dog is Fido"` instead of `"My dog is <Dog named 'Fido'>"` because the `+` operator implicitly calls `str` on the object being concatenated.
__str__和__repr__的区别
__str__和__repr__都是Python中的特殊方法,用于定制对象的字符串表示形式。它们的区别如下:
1. __str__方法:
- 作用:用于返回对象的可读性好的字符串表示形式,通常用于打印对象或者在交互式环境中显示对象。
- 调用方式:通过内置函数str()或者print()来调用。
- 示例代码:
```python
class Person:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Person: {self.name}"
p = Person("Alice")
print(p) # 输出:Person: Alice
```
2. __repr__方法:
- 作用:用于返回对象的官方字符串表示形式,通常包含创建该对象的Python表达式,可以用于重新创建该对象。
- 调用方式:通过内置函数repr()来调用,或者在交互式环境中直接输入对象名。
- 示例代码:
```python
class Person:
def __init__(self, name):
self.name = name
def __repr__(self):
return f"Person('{self.name}')"
p = Person("Alice")
repr(p) # 输出:Person('Alice')
```
阅读全文