有没有办法将模块中的函数继承到类中

时间:2014-04-02 10:02:46

标签: python

我有一个模块,其中定义了许多功能。有没有办法将所有这些函数继承到我在另一个模块中的类中。

说我有module1函数func1(), func2()

我有另一个模块module2,我有一个类

class class1:
    def __init__(self):
        .....
    def func3(self):
        ....

我想从module1继承func1()func2()到class1。因此class1的任何对象都应该能够访问这些函数。

obj1 = class1()

我应该可以obj1.func1()

有没有办法在python中实现这个目标

3 个答案:

答案 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)