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路径中永远不要有父/子目录。我还怀疑,考虑到这一点,这可能是不可能的。也许你可以用._;文件__;来代替,它应该仍然是一致的?