我正在编写一个井字游戏。我检查获胜的功能过于重复和庞大,因此我想将其放入外部文件中。我的想法是:
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
有没有办法做到这一点,还是应该将所有内容都放在一个文件中?
答案 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
方法及其作用。如果您不小心,还可以引入具有多重继承的细微错误。因此,在您的情况下,我更喜欢第一种方法。