如何从外部文件将函数导入类?

时间:2020-06-08 09:24:33

标签: python function import

我正在编写一个井字游戏。我检查获胜的功能过于重复和庞大,因此我想将其放入外部文件中。我的想法是:

class Game(object):
    def __init__(self):
        pass
    import funcFile

instance = Game()
instance.func()

在funcFile.py中是:

def func():
    print("Hello world!")

但是:

Traceback (most recent call last):
    instance.func()
TypeError: 'module' object is not callable

有没有办法做到这一点,还是应该将所有内容都放在一个文件中?

2 个答案:

答案 0 :(得分:0)

您应在主文件中尝试from funcFile import func

from funcFile import func

class Game(object):
    def __init__(self):
        pass
    import funcFile

instance = Game()
instance.func()

答案 1 :(得分:0)

有很多方法可以解决此类问题。

最直接的解决方案(我认为您想到的是)将func方法的实现分解到一个单独的模块中。但是您仍然需要定义类中的方法。

main.py

from func_module import func_implementation

class Game:  # note: you don't need (object)
    def __init__(self):
        pass

    def func(self):
        return func_implementation()

instance = Game()
instance.func()

func_module.py

def func_implementation():
    print('hello')

另一种方法是将func方法分解为Game类继承的另一个类。此模式也称为mixin class

main.py

from func_module import FuncMixin

class Game(FuncMixin):
    def __init__(self):
        pass

instance = Game()
instance.func()

func_module.py

class FuncMixin:
    def func(self):
        print('hello')

但这还不太清楚,因为您不能立即看到Game类具有func方法及其作用。如果您不小心,还可以引入具有多重继承的细微错误。因此,在您的情况下,我更喜欢第一种方法。