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中实现这一点?
atm 我只能通过使用我不想要的额外属性来实现这一点
解决方案
我认为这是一个比较糟糕的设计,建议你找到一种不同的方式来表达你想做的事情。
也就是说,使用__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
是一个模块:它应该适用于几乎任何目标。
推荐阅读
- python - pandas iterrows() 比较只将最后一个结果写入所有行
- frameworks - Xcode 11 在 AppExtension 中使用框架
- scrollview - SwiftUI 图像在 NavigationLink 中消失
- ios - 简单地继承 UITouchGestureRecognizer,设置 minimumPressDuration
- html - 使用粘性图像时删除页面底部的空白
- tensorflow - MapDataset 如何从 Python 中捕获用户定义的函数并注入到 C++ 实现中
- docker - 在 Docker 中,不能 cd 进入使用“go get”安装的目录吗?
- javascript - 如何从 html 表中的动态生成的输入文件控件中删除一个选定文件的文件
- javascript - 在jQuery中单击自身内部的元素时删除动态生成的元素?
- docker - 如何跟踪是否从我的浏览器/docker 容器发送了 Xdebug 请求?