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
。谢谢!我去查一下。