首页 > 解决方案 > 如何在另一个类中使用模块的方法

问题描述

我有一个名为 mymodule 的模块。该模块有一个方法sayHello()

所以这有效:

import mymodule
print(mymodule.sayHello())

现在我想使用mymodule一个类的方法(所有方法)。

import mymodule

class Grandma(object):

    def __init__(self):
        ##import methods from mymodule.

所以我可以在另一堂课上做:

from grandma import Grandma
self.Grandma.sayHello()

我怎样才能在python中实现这一点?

atm 我只能通过使用我不想要的额外属性来实现这一点

标签: pythonpython-3.x

解决方案


我认为这是一个比较糟糕的设计,建议你找到一种不同的方式来表达你想做的事情。

也就是说,使用__init_subclass__父类的方法使这变得非常容易:我们只需遍历模块的目录并将所有属性分配给类上的相同属性。

from abc import ABC

class ModuleABC(ABC):
    def __init_subclass__(cls, module, **kwargs):
        super().__init_subclass__(**kwargs)
        for name in dir(module):
            # Ignore attributes we define as part of the class and "private" attributes
            if not hasattr(cls, name) and not name.startswith('_'):
                setattr(cls, name, getattr(module, name))

import math

class Grandma(ModuleABC, module=math):
    pass

print(Grandma.tau)
# 6.283185307179586

这实际上也不需要它module是一个模块:它应该适用于几乎任何目标。


推荐阅读