【问题标题】:Nested classes in object oriented python面向对象的python中的嵌套类
【发布时间】:2020-07-15 12:14:42
【问题描述】:

我想做以下事情:

import mymodule

m = mymodule.MyModule()

m.dosth()
# Does something

m.more.domore()
# Does more

mymodule __init__.py 文件如下所示:

class MyModule():
    def __init__(self):
        pass # Constructor

    def dosth(self):
        print("My module is doing something!")
    
    class more:
        def domore(self):
            print("My module is doing even more!")

但是当我运行我的脚本时,会发生 TypeError: TypeError: domore() missing 1 required positional argument: 'self。如何调用 more 类中的方法而不会出错?

【问题讨论】:

  • 为什么?嵌套类在 Python 中很少见,静态方法也很少见(尽管较少)。

标签: python class oop methods


【解决方案1】:

这个方法要么需要是静态的:

class MyModule():
    def __init__(self):
        pass # Constructor
    def dosth(self):
        print("My module is doing something!")

    class more:
        @staticmethod
        def domore():
            print("My module is doing even more!")

m = MyModule()
m.more.domore()
# or directly
MyModule.more.domore()

或者你需要先创建一个more的实例:

m = MyModule.more()
m.domore()

【讨论】:

  • 我认为添加一个作为more 类实例的属性也应该可以解决问题,并允许按照OP 的意图使用m.more(根据我的理解)。跨度>
  • 没有足够的信息说明 OP 为何希望此设计说明是否应将 more 的实例添加为属性。
【解决方案2】:

在更解决了我的问题之后添加()

m.more().domore()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多