Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 ATTR图书馆和超级图书馆_Python_Oop_Super_Python Attrs - Fatal编程技术网

Python ATTR图书馆和超级图书馆

Python ATTR图书馆和超级图书馆,python,oop,super,python-attrs,Python,Oop,Super,Python Attrs,下面是一个我想要重构的类的玩具示例。实际上,我有更多的参数/属性,比如动量,所以有很多代码重复: class TransformBl(tf.keras.Model): def __init__(self, features, momentum=0.1, **kwargs): super(TransformBl, self).__init__(**kwar

下面是一个我想要重构的类的玩具示例。实际上,我有更多的参数/属性,比如动量,所以有很多代码重复:

class TransformBl(tf.keras.Model):
    def __init__(self, 
                 features,
                 momentum=0.1,
                 **kwargs):        
        super(TransformBl, self).__init__(**kwargs)
        self.features = features
        self.momentum = momentum
        self.transform = tf.keras.layers.Dense(self.features, use_bias=False)

    def call(self, inputs, training=None):
        x = self.transform(inputs)
        return x
我已经开始寻找避免重复的解决方案,
attrs
library似乎很合适。
功能
动量
和继承没有问题。 不幸的是,我在
中找不到类似
super(TransformBl,self)这样的构造的示例
我只尝试了
super()
,但是我得到了
RuntimeError:super():没有参数


有没有办法用
attrs
风格重新编写这个类?

我担心您既不能使用
attrs
也不能使用dataclasses,这是由于一些难以理解的原因而提到的。既不允许您的
\uuuuu init\uuuu
使用
**kwargs
,但更重要的是,也不允许您在设置实例属性之前运行
super()。\uuuuu init\uuuuuu()
,因为两者都只有post-init钩子的概念

尝试使用它会给您一个运行时错误,因为模型截获了
\uuuuu setattr\uuuuu

RuntimeError: It looks like you are subclassing `Model` and you forgot to call `super(YourClass, self).__init__()`. Always start with this line.
attrs
可以通过编写一个单独的
\uuuuu attrs\u init\uuu
方法来增加对所需内容的支持,您可以在运行必要的super之后从
\uuuuu init\uuu
调用该方法:

目前还没有迫在眉睫的时间表,但像这样的问题是一个很好的理由


在链接的票证中,还有一个解决PyTorch类似问题的方法。

我担心您既不能使用
attrs
也不能使用dataclasses,这是由于一些难以理解的原因而提到的。既不允许您的
\uuuuu init\uuuu
使用
**kwargs
,但更重要的是,也不允许您在设置实例属性之前运行
super()。\uuuuu init\uuuuuu()
,因为两者都只有post-init钩子的概念

尝试使用它会给您一个运行时错误,因为模型截获了
\uuuuu setattr\uuuuu

RuntimeError: It looks like you are subclassing `Model` and you forgot to call `super(YourClass, self).__init__()`. Always start with this line.
attrs
可以通过编写一个单独的
\uuuuu attrs\u init\uuu
方法来增加对所需内容的支持,您可以在运行必要的super之后从
\uuuuu init\uuu
调用该方法:

目前还没有迫在眉睫的时间表,但像这样的问题是一个很好的理由


在链接的票据中,还有一个解决PyTorch类似问题的方法。

我建议使用自Python 3.7(也后端口到3.6)以来可用的
数据类。
数据类
提供
属性
的子集功能-我还需要验证器。无论如何,也许我遗漏了一些明显的东西,但是我没有找到任何关于
dataclasses
super
的例子。你的问题中没有关于验证器的内容。对于数据类,您将需要使用
\uuu post\u init\uu
方法,而不是调用
super
。谢谢!我会检查一下。我建议使用自Python 3.7(也向后移植到3.6)以来可用的
dataclasses
dataclasses
提供
attrs
的子集功能-我还需要验证器。无论如何,也许我遗漏了一些明显的东西,但是我没有找到任何关于
dataclasses
super
的例子。你的问题中没有关于验证器的内容。对于数据类,您将需要使用
\uuu post\u init\uu
方法,而不是调用
super
。谢谢!我去查一下。