我正在为Squish Automation Tool使用python语言。这个工具扩展了python与一些自定义对象和函数。这就是他们在manual中所说的:
Squish的Python特定扩展模块由。自动加载 在内部执行以下语句的等价物:
Python import test import testData import object import objectMap import squishinfo from squish import *
这意味着除非您自己导入,否则无需自行导入 正在开发自己的独立模块。
通过这样做,他们会自动重新定义object
(到this),所以我尝试进行新式课程(如class NewClass(object):
)会让我失望错误:
TypeError:调用元类库时出错。
module.__init__()
最多需要2个参数(给定3个)
所以我试图让object
回来。
阅读the amazing article about metaclasses后,我正在尝试使用以下代码获取object
:
class OrigObject:
__metaclass__ = type
class NewClass(OrigObject):
pass
我的问题是:是否与继承原始object
类相同?
更新:我只能使用 Python 2.4 (如果重要的话)
谢谢!
答案 0 :(得分:7)
从您关联的页面开始:
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
没有坏处他们制造问题。
答案 1 :(得分:2)
这将为您提供:basestring.__bases__[0]
。