python子类增加属性_Python:如何重写子类中实例属性的类型提示?

在深入研究之前,我的问题是:如何在子类中使用类型提示来指定实例属性上的不同类型?在

如果你不清楚这意味着什么,请阅读下面的内容,我在这里举了一个例子来说明问题。在

完整说明

我有一个抽象类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()

基本上,为了解决所有问题,我可以做以下几件事之一:在Foo内删除get_something返回时的类型提示

在SubclassOfFoo中为self.my_class使用类型提示来清除问题

使用泛型?在

选项1是我试图避免的

选项2不错,但我想不通

选项3也是一个选项。在

我也对其他选择持开放态度,因为我相信还有更好的方法。在

你能帮我想出正确的处理方法吗?

我尝试过的

为了模拟选项2,我尝试使用typing.Type,如下所示:Subclass in type hinting

然而,这对我来说并不管用。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值