Python a、 _uuu添加_uuu(a)与a+a不同
python 3.7.0 在下面的代码中 a+a和a.。\u_________a可能不同 我怎样才能让a+a返回a.。\u添加\u a 运行它并获取Python a、 _uuu添加_uuu(a)与a+a不同,python,Python,python 3.7.0 在下面的代码中 a+a和a.。\u_________a可能不同 我怎样才能让a+a返回a.。\u添加\u a 运行它并获取 --- a line --- ADD 因为我想用类似的规则重新加载几个内置函数 我想用一个循环来实现 所以直接在类中定义函数,比如 class lalala(): def __add__(self,args): return blabla 不适合我 顺便说一句,我发现元类是有效的 import tensorflow as
--- a line ---
ADD
因为我想用类似的规则重新加载几个内置函数
我想用一个循环来实现
所以直接在类中定义函数,比如
class lalala():
def __add__(self,args):
return blabla
不适合我
顺便说一句,我发现元类是有效的
import tensorflow as tf
class MetaT(type):
def __new__(cls, n, b, a):
def res(self, arg):
print("ADD")
return super(self.__class__, self).__add__(arg)
a["__add__"] = res
return type.__new__(cls, n, b, a)
class T(tf.Tensor, metaclass=MetaT):
def __init__(self, D):
super().__init__(D.op, D.value_index, D.dtype)
a = T(tf.constant([1,2,3]))
b = a+a
print("--- a line ---")
b = type(a).__add__(a,a)
此输出:
ADD
--- a line ---
ADD
用于操作重写的Dunder方法是从类调用的,而不是从其实例调用的。在这里,您将覆盖一个 您需要在类主体中声明uuu add
class T(tf.Tensor):
def __init__(self, data):
super().__init__(data.op, data.value_index, data.dtype)
def __add__(self, arg):
print("ADD")
return super().__add__(arg)
a = T(tf.constant([1,2,3]))
a+a # prints: ADD
class T(tf.Tensor):
def __init__(self, data):
super().__init__(data.op, data.value_index, data.dtype)
def __add__(self, arg):
print("ADD")
return super().__add__(arg)
a = T(tf.constant([1,2,3]))
a+a # prints: ADD