2

我正在为 Squish 自动化工具使用 python 语言。这个工具用一些自定义对象和函数扩展了 python。这就是他们在手册中所说的:

Squish 特定于 Python 的扩展模块通过在内部执行等效于以下语句的方式自动加载:

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

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

通过这样做,他们会object自动重新定义(到this),所以我尝试做 New-Style Classes(如class NewClass(object):)给我一个错误:

TypeError:调用元类库时出错。module.__init__() 最多接受 2 个参数(给定 3 个)

所以我正在努力object挽回。在阅读了关于元类的精彩文章后,我尝试object使用以下代码获取:

class OrigObject:
    __metaclass__ = type

class NewClass(OrigObject):
    pass

object我的问题是:这与从原始类继承相同吗?

更新:我仅限于使用Python 2.4(如果重要的话)

谢谢!

4

2 回答 2

7

从您链接的页面:

Squish 的对象模块与所有 Python 2 新型类和所有 Python 3 类的基类同名。在实践中,这很少是一个问题。对于 Python 2,我们可以只创建旧样式的类或者做import __builtin__和继承__builtin__.object而不是 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会产生问题。

于 2012-04-23T14:06:59.473 回答
2

This will get it for you: basestring.__bases__[0].

于 2012-04-23T14:02:11.260 回答