我正在使用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]
.