Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python a、 _uuu添加_uuu(a)与a+a不同_Python - Fatal编程技术网

Python a、 _uuu添加_uuu(a)与a+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

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 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