假设我有一个包含类my_class.py
(see PEP 8 convention for modules)的Python模块MyClass
(see PEP 8 convention for classes)。
现在,我想在同一包中的模块中实例化该类,通常可以做到
from .my_class import MyClass
my_class = MyClass()
因为PEP 8为实例变量名称here提出了这种命名方案。
但是,在这种情况下,my_class
已经引用了模块my_class.py
,因此实例变量将对模块进行屏蔽。
PEP 8或任何其他来源是否对如何进行此处提供任何指导,还是由开发人员考虑为变量使用其他但不太直观的名称?
答案 0 :(得分:4)
在您的示例中,您已明确导入MyClass
。
导入模块my_class
时,不会在您的本地作用域中为其分配变量,因此您不会通过在my_class
实例中使用MyClass
来对其进行遮蔽。
更新
在同一包中导入模块时,它看起来像是将引用添加到本地范围,但是,使用相同名称没有风险。 Python中的变量是对对象而不是对象的引用。
当您重新分配引用(例如,使用另一个对象的名称)时,如果没有其他引用,则该对象将被删除。对于模块,在导入时将它们添加到sys.modules
中,在这种情况下,总是存在另一个引用,并且不会删除它们。