pol*_*olo 5 python python-3.7 python-attrs
所以我喜欢使用 attr 但有时我需要做我自己的事情。我可以__init__用自己的方法覆盖该方法吗?
import attr
@attr.s(auto_attribs=True)
class MyClass:
i: int
def __init__(self, i, special=None):
if special:
self.i = special
else:
self.i = i
>>> a = MyClass(i=1,special=2)
Traceback (most recent call last):
File "<input>", line 1, in <module>
a = MyClass(i=1,special=2)
TypeError: __init__() got an unexpected keyword argument 'special'
Run Code Online (Sandbox Code Playgroud)
另一个例子:
@attr.s(auto_attribs=True)
class MyOtherClass:
i: int
def __init__(self, i, **kwargs):
self.i = kwargs.get('magic',i)
>>> a = MyOtherClass(i=5,magic=12)
Traceback (most recent call last):
File "<input>", line 1, in <module>
a = MyOtherClass(i=5,magic=12)
TypeError: __init__() got an unexpected keyword argument 'magic'
Run Code Online (Sandbox Code Playgroud)
如果您传递@attr.s(auto_attribs=True, init=False),则 attrs 将不会创建方法(对于, , ...__init__的作用相同)。repreq
从 attrs 20.1.0 开始,如果您传递@attr.s(auto_attribs=True, auto_detect=True)或使用 NG API (无需参数),它将自动检测当前类上@attr.define是否存在自定义__init__(以及所有其他方法),并不会\xe2\x80\x99t 覆盖它__。
| 归档时间: |
|
| 查看次数: |
5866 次 |
| 最近记录: |