ika*_*men 20 python mixins pycharm
我正在使用 mixin 将一系列功能分离到不同的类。这个 Mixin 只应该与唯一的子类混合:
class Mixin:
def complex_operation(self):
return self.foo.capitalize()
class A(Mixin):
def __init__(self):
self.foo = 'foo'
Run Code Online (Sandbox Code Playgroud)
在我的方法Mixin.complex_operationPyCharm 中给出警告“未解析的属性引用 foo”。
我是否正确使用了 mixin 模式?有没有更好的办法?(我希望在我的 mixin 中有类型提示和自动完成功能,并且我希望有多个 mixin。)
ika*_*men 11
在 Mixin 中声明必要的字段,例如:
class Mixin:
foo:str
def complex_operation(self):
return self.foo.capitalize()
Run Code Online (Sandbox Code Playgroud)
这样 mixin 实际上声明了一个类必须能够使用这个 mixin 的字段。如果扩展类将不兼容的类型放入声明的字段中,类型提示将创建警告。
编辑:按照@valex 的建议将 foo = None 替换为 foo:str
我看到的选择很少。
1)类型注释(我认为这是最干净的解决方案):
class Mixin:
foo: str
def complex_operation(self):
return self.foo.capitalize()
Run Code Online (Sandbox Code Playgroud)
2) 默认None(@ikamen 选项):
class Mixin:
foo = None
def complex_operation(self):
return self.foo.capitalize()
Run Code Online (Sandbox Code Playgroud)
3)抑制类或特定行的未解决的引用错误(我认为这比前两种方式更肮脏):
# noinspection PyUnresolvedReferences
class Mixin:
def complex_operation(self):
return self.foo.capitalize()
Run Code Online (Sandbox Code Playgroud)
class Mixin:
def complex_operation(self):
# noinspection PyUnresolvedReferences
return self.foo.capitalize()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2645 次 |
| 最近记录: |