__str__和__repr__
- 无方法
- 有方法
- __str__
- __repr__
- 同时存在
__str__和__repr__都是更改print的输出形式
无方法
- 无特殊方法
class Person:def __init__(self,name,age):self.name = nameself.age = ageprint(Person('aa', 34))
<main.Person object at 0x000002231EF78B38>
有方法
str
class Person:def __init__(self,name,age):self.name = nameself.age = agedef __str__(self):# 获取当前方法的名称current_method_name = inspect.currentframe().f_code.co_namereturn f"function:{current_method_name} name:{self.name},age:{self.age}"print(Person('aa', 34))
function:__str__ name:aa,age:34
repr
class Person:def __init__(self,name,age):self.name = nameself.age = agedef __repr__(self):# 获取当前方法的名称current_method_name = inspect.currentframe().f_code.co_namereturn f"function:{current_method_name} name:{self.name},age:{self.age}"print(Person('repr', 18))
function:__repr__ name:repr,age:18
同时存在
- 肯定存在优先级高低的问题
class Person:def __init__(self,name,age):self.name = nameself.age = agedef __repr__(self):# 获取当前方法的名称current_method_name = inspect.currentframe().f_code.co_namereturn f"function:{current_method_name} name:{self.name},age:{self.age}"def __str__(self):# 获取当前方法的名称current_method_name = inspect.currentframe().f_code.co_namereturn f"function:{current_method_name} name:{self.name},age:{self.age}"print(Person('test', 18))
__str__优先级更高