在开始研究之前,这是我的问题:如何在子类中使用类型提示在实例属性上指定其他类型?
如果您不清楚这是什么意思,请阅读下面的内容,我在其中草拟了一个示例以澄清问题。
完整说明
我有一个抽象类Foo
和一个名为Foo
的子类SubclassOfFoo
。
[Foo
具有抽象方法get_something
,该方法返回类型为Something
的对象。
Something
具有一个称为SubclassOfSomething
的子类。 SubclassOfSomething
有另一种方法something_special
。
SubclassOfFoo
覆盖get_something
以返回类型为SubclassOfSomething
的对象。然后,SubclassOfFoo
尝试使用SubclassOfSomething
的方法something_special
。
但是,目前我的PyCharm的检查报告为Unresolved attribute reference 'something_special' for class 'Something'
。我正在尝试找出解决此问题的正确方法。
这都非常令人困惑,因此我制作了一个不错的小代码段来帮助您:
from abc import ABC, abstractmethod
class Something:
def __init__(self):
self.attr = 0
class SubclassOfSomething(Something):
def __init__(self):
Something.__init__(self)
def something_special(self):
self.attr = 1
class Foo(ABC):
def __init__(self):
self.my_class = self.get_something()
@abstractmethod
def get_something(self) -> Something:
pass
class SubclassOfFoo(Foo):
def __init__(self):
Foo.__init__(self)
def get_something(self) -> SubclassOfSomething:
return SubclassOfSomething()
def do_something_special(self):
self.my_class.something_special()
基本上,为了使所有事情都能解决,我可以做几件事之一:
get_something
中Foo
返回的类型提示SubclassOfFoo
中使用类型提示来为self.my_class
清除内容>>选项#1是我要避免的选项
选项2不错,但我无法弄清楚
选项3也是一个选项。
我也愿意接受其他选择,因为我确定有更好的方法。
您能帮我找出解决此问题的正确方法吗?
我尝试过的事情
为了模拟选项#2,我尝试按照此处的建议使用typing.Type
:Subclass in type hinting
但是,这对我不起作用。
在开始学习之前,这是我的问题:如何在子类中使用类型提示在实例属性上指定其他类型?如果您不清楚这是什么意思,请在下面阅读我的位置...
您也可以在something_special
上提供Something
方法,并提出NotImplementedError
您可以在类定义的开头为my_class
属性提供类型提示: