我将Python3.7.6与PyCharm一起使用。我希望我的代码可以作为一个很好的内部API来工作,并为对象显示代码完成,所以我希望使用类型
我正试图找到一个好的模式,用于:
(下面的例子)
我在下面找到了一个方法,但感觉像是一个黑客。正确(或更好)的方法是什么
from typing import List, Type
class Leg:
def step(self):
print("step")
class DuckLeg(Leg):
def paddle(self):
print("splosh")
class Biped:
def __init__(self, leg_type: Type[Leg]):
self.legs: List[leg_type] = [leg_type(), leg_type()]
def walk(self):
for leg in self.legs:
leg.step()
class Duck(Biped):
def __init__(self):
super().__init__(leg_type=DuckLeg)
self.legs: List[DuckLeg] = self.legs # A hack?
my_duck = Duck()
my_duck.walk() # code-completion appears for .walk()
my_duck.legs[0].paddle() # code-completion appears for .paddle()
编辑1:这个问题不是关于在哪里放置类型注释,而是如何确保代码完成在这种上下文中工作。如果以下行被注释掉
self.legs: List[DuckLeg] = self.legs
…由于duck键入,代码仍将运行,但.paile()的代码完成将不会出现,当手动输入PyCharm时,代码检查将报告:类“Leg”的未解析属性引用“paile”
不确定这是否真的解决了你的问题,但我认为这比你的建议更干净:
相关问题 更多 >
编程相关推荐