我有一个类,位于一个单独的模块中,我不能更改它。
from module import MyClass
class ReplaceClass(object)
...
MyClass = ReplaceClass这不会更改MyClass anywhere,但会更改此文件。但是,如果我要添加如下所示的方法
def bar():
print 123
MyClass.foo = bar这将会起作用,foo方法将在其他任何地方都可用。
我如何完全替换这个类?
发布于 2010-09-22 07:30:30
import module
class ReplaceClass(object):
....
module.MyClass = ReplaceClass发布于 2010-09-22 07:33:25
当您最需要的是限定的名称时,请避免使用from ... import (可怕的;-)方式来获取栏名称。一旦你以正确的Pythonic方式做事情:
import module
class ReplaceClass(object): ...
module.MyClass = ReplaceClass这样,您就可以手动匹配模块的对象,这是您需要的,当该模块用于其他模块时,该对象将会起作用。使用from ...表单,您只是没有模块对象(查看大多数人使用from ...的明显缺陷的一种方法),因此您的情况显然更糟;-);
我推荐使用from语句的一种方式是从包中导入模块:
from some.package.here import amodule因此,您仍将获取模块对象,并将对该模块中的所有名称使用限定名称。
发布于 2011-10-20 09:38:56
我只是一只蛋。。。。对于非新手来说,这可能是显而易见的,但我需要from some.package.module import module的习惯用法。
我不得不修改GenerallyHelpfulClass的一个方法。这失败了:
import some.package.module
class SpeciallyHelpfulClass(some.package.module.GenerallyHelpfulClass):
def general_method(self):...
some.package.module.GenerallyHelpfulClass = SpeciallyHelpfulClass代码运行了,但没有使用重载到SpeciallyHelpfulClass上的行为。
这是可行的:
from some.package import module
class SpeciallyHelpfulClass(module.GenerallyHelpfulClass):
def general_method(self):...
module.GenerallyHelpfulClass = SpeciallyHelpfulClass我推测,正如亚历克斯所写的那样,from ... import惯用法“获得了模块”,因为它将被包中的其他模块所采用。进一步推测,较长的点引用似乎将模块带入到具有import by long dotted引用的名称空间中,但不会更改其他名称空间使用的模块。因此,对导入模块的更改只会出现在它们所在的名称空间中。这就好像有两个相同模块的副本,每个副本都在略有不同的引用下。
https://stackoverflow.com/questions/3765222
复制相似问题