python - Python中抽象方法的静态类型检查
问题描述
如何确保实现抽象方法的方法遵守 python 静态类型检查。如果实现的方法的返回类型不正确,pycharm 中是否有办法获取错误?
class Dog:
@abc.abstractmethod
def bark(self) -> str:
raise NotImplementedError("A dog must bark")
class Chihuahua(Dog):
def bark(self):
return 123
因此,对于上面的代码,我想得到某种提示,表明我的吉娃娃有问题
解决方案
不,没有(简单的)方法可以强制执行此操作。
实际上,您没有任何问题,Chihuahua
因为 Python 的鸭子类型允许您覆盖bark
. 所以Chihuahua.bark
返回 anint
是完全有效的代码(尽管不一定是好的做法,因为它违反了 LSP)。使用该abc
模块根本不会改变这一点,因为它不会强制执行方法签名。
要“强制”该类型,只需将类型提示传递给新方法,这使其显式。它还会导致 PyCharm 显示警告。
import abc
class Dog:
@abc.abstractmethod
def bark(self) -> str:
raise NotImplementedError("A dog must bark")
class Chihuahua(Dog):
def bark(self) -> str:
# PyCharm warns against the return type
return 123
推荐阅读
- android - 未捕获的异常非法类访问:androidx.appcompat.widget.ContentFrameLayout 试图访问 androidx.appcompat.app.r
- redis - 'kubectl run' redis-cli 直接
- node.js - Firestore 查询时间戳给出“您的函数超时”
- scala - 在scala中的函数定义之前放置一个案例类是什么意思?
- sql - ORA-00904: "\d+$": 无效标识符
- android - google-servces.json 的 SHA1 证书指纹
- r - 如何更正错误消息 Error: nanodbc/nanodbc.cpp:1021: HYT00: [Microsoft][ODBC SQL Server Driver]Login timeout expired
- graphql - Graphql React Dev Tools 写入结果时缺少字段
- ios - Swift 5 SideMenu 子视图不显示文本字段和按钮
- django - Django 使用表单集休息