从Python3.5开始,您可以使用泛型和PEP-0484中描述的其他有趣的东西。 我试过了,这里有一个代码:
from typing import TypeVar, Generic, Optional
...
_T = TypeVar('T')
_S = TypeVar('S')
class Pool(Generic[_S, _T]):
def __init__(self) -> None:
self.pool = dict()
... getters and setters here...
这段代码工作得很好,可以完成预期的任务。然后我决定扩展这个课程来做一些额外的工作。我就是这样做的:
^{pr2}$为了测试Pool
类,我创建了MyPool
,如下所示:
class MyPool(Pool[str, Hello]):
pass
然后我放了一些类似mypool = MyPool()
的东西,效果很好。一旦我实现了PoolEx
,我将MyPool
更新为:
class MyPool(PoolEx[str, Hello]):
ARGUMENTS = ['name', 'surname']
并试图做同样的事情:mypool = MyPool()
。不幸的是我得到了:
self= <__main__.MyPool object at 0x1068644e0> (__main__.PoolEx[str, __main__.Hello],)
Traceback (most recent call last):
File "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5/runpy.py", line 170, in _run_module_as_main
"__main__", mod_spec)
File "/usr/local/Cellar/python3/3.5.0/Frameworks/Python.framework/Versions/3.5/lib/python3.5/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/Users/8bitjoey/.../utils/pool.py", line 141, in <module>
mypool = MyPool()
File "/Users/8bitjoey/.../utils/pool.py", line 52, in __init__
super(PoolEx, self).__init__()
TypeError: super(type, obj): obj must be an instance or subtype of type
如您所见,我还将self.__class__.__bases
放入日志中。当我试图测试isinstance(self, PoolEx)
并与issubclass
相似时,我得到了错误的结果。与super()
验证相同。在
是我的代码有问题还是这样的类不能有后代?如果我还想拥有PoolEx,我必须使用组合而不是继承。在
目前没有回答
相关问题 更多 >
编程相关推荐