Python:重新定义了原始'object'类。如何让'object'课回来?



我正在使用python语言来制作Squish Automation Tool。此工具使用一些自定义对象和函数扩展了 python。这是他们在手册中所说的:

Squish的Python特定扩展模块由以下人员自动加载 在内部执行等效于以下语句:

Python
import test
import testData
import object
import objectMap
import squishinfo
from squish import *

这意味着没有必要自己导入它们,除非您 正在开发您自己的独立模块。

通过这样做,他们会自动重新定义object(对此),因此我尝试执行新样式类(如class NewClass(object):)会给我一个错误:

类型错误:调用元类基时出错。 module.__init__() 最多需要 2 个参数(给定 3 个)

所以我试图把object找回来。在阅读了有关元类的精彩文章后,我尝试使用以下代码获取object

class OrigObject:
    __metaclass__ = type
class NewClass(OrigObject):
    pass

我的问题是:这和继承原始object类是一样的吗?

更新:我只能使用Python 2.4(如果这很重要的话)

谢谢!

从您链接的页面:

Squish 的对象模块与所有 Python 2 新样式类和所有 Python 3 类的基类具有相同的名称。在实践中,这很少是一个问题。对于 Python 2,我们可以只创建旧式类,也可以执行import __builtin__并从__builtin__.object而不是对象继承。对于 Python 3,不需要做任何事情,因为我们从不显式继承对象,因为如果没有指定其他类,默认情况下会继承对象。

所以:

>>> import __builtin__
>>> __builtin__.object
<type 'object'>
>>> class SomeOldStyleClass():
...    pass
... 
>>> SomeOldStyleClass.__subclasses__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: class SomeOldStyleClass has no attribute '__subclasses__'
>>> class SomeClass(__builtin__.object):
...    pass
... 
>>> SomeClass.__subclasses__()
[]

虽然,我要指出,我认为对于所述模块的创建者来说,这是一个非常糟糕的决定,他们应该称之为别的东西。即使它针对的是Python 3.x,如果他们为2.x分发它,他们也应该考虑一下,称它为其他东西对他们没有坏处,并且通过称呼它object他们会产生问题。

这将为您获取它:basestring.__bases__[0] .

相关内容

最新更新