我有一个模块,其中定义了许多功能。有没有办法将所有这些函数继承到我在另一个模块中的类中。
说我有module1
函数func1(), func2()
我有另一个模块module2,我有一个类
class class1:
def __init__(self):
.....
def func3(self):
....
我想从module1继承func1()
和func2()
到class1。因此class1的任何对象都应该能够访问这些函数。
obj1 = class1()
我应该可以obj1.func1()
有没有办法在python中实现这个目标
答案 0 :(得分:1)
您可以将您的功能从module1
导入module2
,然后从您的班级中进行映射:
from module1 import func1, func2
class class1(object):
...
def func1(self):
return func1()
def func2(self):
return func2()
但是,这有点奇怪。如果你的方法没有收到类的实例,你为什么要这样使用它们呢?
答案 1 :(得分:1)
这应该可以解决问题。
from module1 import func1, func2
class Class1(object):
def func3(self):
...
setattr(Class1, 'func1', func1)
setattr(Class1, 'func2', func2)
定义func1和func2以将self添加为第一个参数时要小心。
答案 2 :(得分:0)
如果您只想在模块中包含一些函数 - 并且在调用时不要求它们传递实例 - 将它们作为静态方法分配给类:
from module1 import func1, func2
class Class1(object):
func1 = staticmethod(func1)
func2 = staticmethod(func2)
如果您想要包含所有功能,可以覆盖__getattr__
:
import module1
class Class1(object):
def __getattr_(self, attr):
try:
return getattr(module1, attr)
except AttributeError:
# catch & re-raise with the class as the
# object type in the exception message
raise AttributeError, 'Class1' object has no attribute '{}'.format(attr)