Python 获取类的self.\uuu模块\uuu,无论如何导入
我有一个库类,根据它的导入方式,这个方法依赖于Python 获取类的self.\uuu模块\uuu,无论如何导入,python,Python,我有一个库类,根据它的导入方式,这个方法依赖于self.\u u module\u uu来识别更改行为-这取决于我是相对导入还是绝对导入。有没有办法强制类的self.\uu\u name\uu属性绝对返回自身 我意识到一个解决方案是强制每个人以相同的方式导入子类,但我想知道是否有办法从库的角度强制导入 总结结构 我在图书馆里有一个模块 project/ mylib/ foo.py LibraryClass def get_n
self.\u u module\u uu
来识别更改行为-这取决于我是相对导入还是绝对导入。有没有办法强制类的self.\uu\u name\uu
属性绝对返回自身
我意识到一个解决方案是强制每个人以相同的方式导入子类,但我想知道是否有办法从库的角度强制导入
总结结构
我在图书馆里有一个模块
project/
mylib/
foo.py
LibraryClass
def get_name(self):
return "%s.%s.%s" % \
(self.__module__, self.__class__.__name__, self.some_init_property)
prog/
utils.py
fooClass(LibraryClass)
bar.py
def some_func()
#see below
在mylib
中,我让一个导入器通过django项目设置文件中的类名字符串导入LibraryClass
的所有子类
基本上,我们看到的行为取决于您导入的方式。
因此,我在bar.py中观察到两种行为:
def some_func_absolute():
from prog.utils import fooClass
f = fooClass("lalala")
print f.get_name()
#prints prog.utils.fooClass.lalala
对
def some_func_relative():
from utils import fooClass
f = fooClass("lalala")
print f.get_name()
#prints foo.fooClass.lalala
我认为正确的做法是在python路径中永远不要有父/子目录。我也怀疑这可能是不可能的,因为你这么做了。根据您正在执行的操作,也许您可以使用
。\uuuuu文件\uuuuuuu
,而无论如何导入,该文件都应保持一致?您是否尝试使用相对导入from.utils import fooClass
而不是from utils import fooClass
?sys.path中是否有两个条目可供您访问这些模块?我从未见过您所描述的行为,但我猜您有一个sys.path为“”或“”,这使您有一次到达那里,另一个是完整路径引用。@JimP-事实证明我们确实在mylib/和foo/级别(在我们更大的项目结构中)进行了双重导入-解决了这个问题。我很乐意回答我们遇到的结构问题。我认为正确的做法是在python路径中永远不要有父/子目录。我还怀疑,考虑到这一点,这可能是不可能的。也许你可以用._;文件__;来代替,它应该仍然是一致的?