我的界面定义为:
class IDefaultedRepo(IRepository):
"""Represents defaulted table in DB"""
def get_values_by_legalbdr(self, legalbdr: str):
raise NotImplementedError
但是,这还不够明确,因为我不知道返回了哪些字段。 我希望有类似的东西:
class IDefaultedRepo(IRepository):
"""Represents defaulted table in DB"""
def get_values_by_legalbdr(self, legalbdr: str)->IDefaultedRepo.Result:
class Result(object):
def __init__(self, terminal, value, container):
self.terminal = terminal
self.value = value
self.container = container
raise NotImplementedError
但是这会抛出一个NameError,因为还没有定义Result类。
有没有办法指定函数的返回类型(以便内部成员可以通过点.
运算符访问),而无需为每个函数显式创建结果类?
编辑我没有在他们自己的模块中定义,因为我认为会有太多的尴尬和冗长的名字。定义一个内部类会更好,因为它不会强制每次都发明一个新的类名,因为返回类型特定于它所做的函数(?)只能将定义的范围限制在这个函数中。但是,看起来我必须在一个单独的模块中定义它们
答案 0 :(得分:0)
问题不在于Result
未定义,而是IDefaultedRepo
未定义,解决方法是使用字符串。请参阅this密切相关的问题。但是,在您的情况下,永远不会定义IDefaultedRepo.Result
,因为您的“内部”类根本不是内部类,它是函数的本地类。如果你真的想要一个内部类,你需要在类体内定义类,而不是在函数体内。
这样的事情:
In [1]: class IRepository: pass
In [2]: class IDefaultedRepo(IRepository):
...: """Represents defaulted table in DB"""
...:
...: class Result:
...: def __init__(self, terminal, value, container):
...: self.terminal = terminal
...: self.value = value
...: self.container = container
...:
...: def get_values_by_legalbdr(self, legalbdr: str)->'IDefaultedRepo.Result':
...: raise NotImplementedError
...:
这不是我的第一个倾向,但是......
但以下检查了mypy
:
class IRepository: pass
class IDefaultedRepo(IRepository):
"""Represents defaulted table in DB"""
class Result:
def __init__(self, terminal, value, container):
self.terminal = terminal
self.value = value
self.container = container
def get_values_by_legalbdr(self, legalbdr: str)->'IDefaultedRepo.Result':
raise NotImplemented
class MyIDefaultRepo(IDefaultedRepo):
def get_values_by_legalbdr(self, legalbdr: str)->'IDefaultedRepo.Result':
class MyResult(IDefaultedRepo.Result):
pass
return MyResult('foo','bar','baz')