如何在另一个类中使用模块的方法

2024-06-28 23:38:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个叫做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中实现这一点?你知道吗

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


Tags: 模块方法fromimportselfobjectinitdef
2条回答

我认为这是相对糟糕的设计,并建议你找到一个不同的方式来表达你想做什么。你知道吗

也就是说,使用父类的^{}方法使这变得非常简单:我们只是循环遍历模块的目录,并将所有属性分配给类上相同的属性。你知道吗

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是一个模块:它应该在任何目标上工作。你知道吗

您可以直接在类定义中导入内容:

class Something:
    from stuff import a, b

    def __init__(self):
        self.a()

您可能想看看如何在实际项目here中使用它。我不是说这是最好的方法(实际上我觉得它比较难看),但它很好用。你知道吗

相关问题 更多 >