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