假设我使用了一些依赖于另一个代码的第三方模块:
# third_party.py
from package import fun, A
class B(A):
def foo(self):
self.do()
self.some()
self.stuff()
return fun(self)
然后我想在我的代码中继承这个类来改变功能:
# my_code.py
from third_party import B
# from third_party import fun?
# from package import fun?
class C(B):
def foo(self):
return fun(self)
有什么更好:from package import fun
或from third_party import fun
可以访问fun
?
我喜欢第二种变体,因为我可能不打扰实际路径并导入third_party
包中的所有依赖项,但这样有任何缺点吗?这是好事还是坏事?
谢谢!
答案 0 :(得分:1)
我不认为从第三方软件包导入函数/类是一种不好的做法,它甚至可能有一些好处(例如:如果你想修补一个包,或者需要确定,那个东西设置正确)。
甚至可能需要支持各种设置。考虑ElementTree
API,它在特定的Python版本上有所不同,甚至可以从第三方库(取自here)提供:
# somepackage.py
try:
from lxml import etree
print("running with lxml.etree")
except ImportError:
try:
# Python 2.5
import xml.etree.cElementTree as etree
print("running with cElementTree on Python 2.5+")
except ImportError:
try:
# Python 2.5
import xml.etree.ElementTree as etree
print("running with ElementTree on Python 2.5+")
except ImportError:
try:
# normal cElementTree install
import cElementTree as etree
print("running with cElementTree")
except ImportError:
try:
# normal ElementTree install
import elementtree.ElementTree as etree
print("running with ElementTree")
except ImportError:
print("Failed to import ElementTree from any known place")
现在,保证somepackage
包含一个有效的etree
实现,即使在不同的Python安装上,您的包也可以作为抽象。