魔术方法可以 return 不同的结果类型吗?
Can magic methods return different result type?
像 def __sub__()
这样对类型 return 进行操作的魔术方法可以是不同的结果类型吗?
例如,在下面的 class 用户中,-1
运算符 return 是一个字符串。要求是如果存在差异 return 显示差异表示的字符串。
import copy
class User:
def __init__(self, username=""):
self.__user_name = username
def __sub__(self,other):
if other.__user_name != self.__user_name:
return "User name changed from {} to {}".format(self.__user_name,
other.__user_name);
else:
return ""
def set_user_name(self, username):
self.__user_name = username
user_1 = User("John")
user_2 = copy.copy(user_1)
user_2.set_user_name("Tom")
user_diff = user_1 - user_2
之后如果我们打印 user_diff
它将是“用户名从 John 更改为 Tom”。
这是允许的并且是显示差异的方式之一,主要是'-' returning 与 User
相比不同的对象类型(字符串)?
当然:标准库中的一个突出示例是 datetime.__sub__
,其中 returns 一个 timedelta
实例,而另一个操作数是另一个 datetime
实例。
>>> d1 = datetime.datetime.now()
>>> d2 = datetime.datetime.now()
>>> type(d2 - d1)
<class 'datetime.timedelta'>
像 def __sub__()
这样对类型 return 进行操作的魔术方法可以是不同的结果类型吗?
例如,在下面的 class 用户中,-1
运算符 return 是一个字符串。要求是如果存在差异 return 显示差异表示的字符串。
import copy
class User:
def __init__(self, username=""):
self.__user_name = username
def __sub__(self,other):
if other.__user_name != self.__user_name:
return "User name changed from {} to {}".format(self.__user_name,
other.__user_name);
else:
return ""
def set_user_name(self, username):
self.__user_name = username
user_1 = User("John")
user_2 = copy.copy(user_1)
user_2.set_user_name("Tom")
user_diff = user_1 - user_2
之后如果我们打印 user_diff
它将是“用户名从 John 更改为 Tom”。
这是允许的并且是显示差异的方式之一,主要是'-' returning 与 User
相比不同的对象类型(字符串)?
当然:标准库中的一个突出示例是 datetime.__sub__
,其中 returns 一个 timedelta
实例,而另一个操作数是另一个 datetime
实例。
>>> d1 = datetime.datetime.now()
>>> d2 = datetime.datetime.now()
>>> type(d2 - d1)
<class 'datetime.timedelta'>