如何在Python脚本中直接导入代码?
我正在开发一个PyQT4的应用程序,但一次性浏览所有代码让我觉得有点困难。我知道有个import foo
的语句,但我不知道怎么能像BASH里的source foo
那样,直接把一段代码引入到我的脚本中。
我想这样做:
# File 'functions.py'
class foo(asd.fgh):
def __init__(self):
print 'foo'
这是第二个文件。
# File 'main.py'
import functions
class foo(asd.fgh):
def qwerty(self):
print 'qwerty'
我想把两个不同文件中的代码或者类的声明合并在一起。在PHP中,有import_once('foo.php')
,而在BASH中有source 'foo.sh'
,那么在Python中我能做到这一点吗?
谢谢!
3 个回答
0
在Python中,猴子补丁的工作方式和其他语言不太一样。通常来说,这种做法被认为是不太好的,但如果你还是想这么做,可以这样操作:
# File 'functions.py'
class foo(asd.fgh):
def __init__(self):
print 'foo'
被导入的模块不会改变。在导入模块的地方,我们的做法会有些不同。
# File 'main.py'
import functions
def qwerty(self):
print 'qwerty'
functions.foo.qwerty = qwerty
注意,这里没有额外的类定义,只有一个简单的函数。然后我们把这个函数作为类的一个属性添加进去。
3
你需要用到 execfile()
这个函数。不过其实你并不需要,因为重新定义一个类,嗯……就是重新定义它。
4
不知道为什么,我第一反应是多重继承。但为什么不试试普通的继承呢?
class foo(functions.foo):
# All of the methods that you want to add go here.
有没有什么原因让这个方法行不通呢?
既然你只是想合并类的定义,那为什么不这样做呢:
# main.py
import functions
# All of the old stuff that was in main.foo is now in this class
class fooBase(asd.fgh):
def qwerty(self):
print 'qwerty'
# Now create a class that has methods and attributes of both classes
class foo(FooBase, functions.foo): # Methods from FooBase take precedence
pass
或者
class foo(functions.foo, FooBase): # Methods from functions.foo take precedence
pass
这个方法利用了Python支持多重继承的特性,可以创建一个新类,里面包含了两个来源的功能。