python 模块 类 函数_将模块中的所有函数和类导入到类python中

首先:不要这样做。在

也许有更好的方法来解决你的具体问题。如果您必须为一个类定义大量相关的方法,并且希望使用模块来组织这些方法,那么就给每个模块一个基类,在这些类上定义方法,然后使用子类将模块中的类合并为一个。见下文。在Why is importing all in a class not allowed

因为class语句是一个作用域的命名空间,在编译时Python需要知道哪些名称被引用为全局变量,并将这些名称与本地名称区分开来。这在函数中尤为重要,在函数中,通过知道在编译时使用的名称,可以高度优化本地命名空间。对于类语句,“local”名称将成为类属性。当涉及到动态局部名称时,类语句比函数更灵活,但是将任意的、动态的名称列表导入到类定义中从未被视为值得支持的用例。在how can I get around this

您可以反省模块并获得Python将导入的所有相同名称,并使用setattr()或通过分配给locals()字典(类语句是后者唯一实际工作的地方)在类上动态设置这些名称。^{} statement documentation列出导入的内容:如果模块定义__all__,那么它将用作要导入的名称列表

否则,将导入所有公共名称(名称不以_开头的所有全局变量)。在

因此,以下操作将获得与在类语句中为Foo使用from bar import *完全相同的效果:import bar

def _import_all(module, class):

namespace = vars(module)

public = (name for name in namespace if name[:1] != "_")

for name in getattr(module, "__all__", public):

setattr(class, name, namespace[name])

class Foo:

pass

_import_all(bar, Foo)

或者,这绝对是更“hack-y”,这取决于内部Python实现细节:

^{pr2}$

is there a better way to split multiple methods up into different files?

是的,使用类。将所有这些方法放在单独的模块中,每个都放在一个类中,然后从每个模块导入这些类并将其用作基类:import bar, spam

class Foo(bar.Base, spam.Base):

pass

其中bar.py将定义Base类:class Base:

def print_bar(self):

print("bar")

spam等也一样。您可以根据需要向这些基本mixin类添加和删除方法,并且组合基类的import语句不会改变。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值