当前位置: 首页 > 知识库问答 >
问题:

返回内部类的实例

戎永福
2023-03-14

我的接口定义为:

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,因为还没有定义结果类。是否有任何方法可以指定函数的返回类型(以便内部成员可以通过点.运算符访问),而无需为每个函数显式创建结果类?

EDIT我没有在他们自己的模块中进行定义,因为我认为会有太多名字尴尬冗长的模块。定义一个内部类会更好,因为它不会每次都强制创建一个新的类名,而且,因为返回类型特定于它生成的函数(?)sens将定义的范围仅限于此函数。但是的,看起来我必须在一个单独的模块中定义它们

共有1个答案

戈建白
2023-03-14

问题不是没有定义Result,而是没有定义IDefaultedRepo,解决方法是使用字符串。请看这个密切相关的问题。但是,在您的情况下,永远不会有<code>IDefaultedRepo。结果定义,因为您的“内部”类根本不是内部类,它是函数的本地类。如果你真的想要一个内部类,你需要在类体中定义类,而不是在函数体中。

大概是这样的:

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
   ...:

不过,这不是我的第一个倾向...

但是下面的代码与< code>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')
 类似资料:
  • 问题内容: 我的代码在这里: 现在,我想在单击“确认”按钮后返回true。因此,如何从内部类-方法的OnClickListener返回“ true”。 需要一些帮助,谢谢。 问题答案: 在这种情况下,您不能从内部类返回任何东西。在这种情况下,这没有多大意义。该程序是否应该在您的onClick函数中等待,直到它返回某些内容?收听者的工作方式并非如此。您需要做的就是获取计划返回的代码,如果返回“ tr

  • 我想创建带有PagerView的片段,但运行以下代码会返回一个IllegalStateException: 源代码: IllegalStateException: 进程:com.company.user.blabla,pid:22256 java.lang.illegalstate异常:带有适配器的ViewPager com.company.user.blabla.fragments.homeFr

  • 我想使用Gson将JSON反序列化为对象。我已经定义了相应的类,其中一些类的对象包含在其他对象中。在尝试反序列化整个JSON时,我得到了空值,所以我开始将其拆分。 我已经到了所有低级类都支持自己的地步,但是当我试图反序列化成一个包含那个较小对象的实例的对象时,所有的东西都返回为null。 我的部分JSON: UserProfile类: UPfield类: 用户类: Ufield类: 我的主要观点是

  • 问题内容: 我在Java中具有JSON序列化对象的字符串表示形式,例如。我如何解析并将其返回到JavaScript上下文,就像在JS中一样?谢谢。 问题答案: Rhino的最新版本只有四个arg,第四个不能为null。为了解决这个问题,您必须创建一个实现org.mozilla.javascript.Callable的简单类: 然后可以像这样调用NativeJSON.parse:

  • 问题内容: 我有一个实用程序方法,当从中删除了不相关的逻辑时,简化的方法将如下所示: 问题是,如果是诸如的内部类,则该方法即使是公共方法也将不起作用,因为它将抛出。 有没有办法动态实例化内部类? 问题答案: 如果它是真正的 内部 类而不是 嵌套 (静态)类,则有一个隐式构造函数参数,它是对外部类实例的引用。在那个阶段您不能使用- 必须获得适当的构造函数。这是一个例子:

  • 实例内部类是指没有用 static 修饰的内部类,有的地方也称为非静态内部类。示例代码如下: 上述示例中的 Inner 类就是实例内部类。实例内部类有如下特点。 1) 在外部类的静态方法和外部类以外的其他类中,必须通过外部类的实例创建内部类的实例。 2)在实例内部类中,可以访问外部类的所有成员。 提示:如果有多层嵌套,则内部类可以访问所有外部类的成员。 3)在外部类中不能直接访问内部类的成员,而必