Python:Original';对象';类被重新定义。如何获得';对象';回来上课?
我正在使用python语言作为Squish自动化工具。此工具使用一些自定义对象和函数扩展python。这是他们在报告中所说的: Squish的特定于Python的扩展模块由 在内部执行以下语句的等效语句:Python:Original';对象';类被重新定义。如何获得';对象';回来上课?,python,metaclass,python-datamodel,Python,Metaclass,Python Datamodel,我正在使用python语言作为Squish自动化工具。此工具使用一些自定义对象和函数扩展python。这是他们在报告中所说的: Squish的特定于Python的扩展模块由 在内部执行以下语句的等效语句: Python import test import testData import object import objectMap import squishinfo from squish import * 这意味着不需要自己导入它们,除非 正在开发自己的独立模块 通过这样做,他们会自动重
Python
import test
import testData
import object
import objectMap
import squishinfo
from squish import *
这意味着不需要自己导入它们,除非
正在开发自己的独立模块
通过这样做,他们会自动重新定义对象
(to),因此我尝试创建新样式的类(如类NewClass(object):
)时出错:
TypeError:调用元类基时出错<代码>模块。\uuuu初始化\uuuuuuuuuu()
最多接受2个参数(给定3个)
所以我正试图把对象
拿回来。
阅读后,我尝试使用以下代码获取对象
:
class OrigObject:
__metaclass__ = type
class NewClass(OrigObject):
pass
我的问题是:这是否与从原始对象继承相同
更新:我只能使用Python 2.4(如果有必要的话)
谢谢 这将为您获得它:basestring.\uu bases\uuu[0]
从您链接的页面:
Squish的对象模块与所有Python2新型类和所有Python3类的基类同名。实际上,这很少是一个问题对于Python2,我们可以只创建旧式类,或者导入内置对象,并从内置对象继承。对于Python3,不需要做任何事情,因为我们从来没有显式地继承对象,因为如果没有指定其他类,它在默认情况下是继承的
因此:
导入内置的__
>>>内置对象
>>>类SomeOldStyleClass():
... 通过
...
>>>SomeOldStyleClass.\uuuu子类\uuuuu()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:class SomeOldStyleClass没有属性“\uuu子类\uuuu”
>>>类SomeClass(\uuuuu内置\uuuuuuu.object):
... 通过
...
>>>SomeClass.\uuuu子类
[]
虽然,我会注意到,我认为对于上述模块的创建者来说,这是一个极其糟糕的决定,他们应该把它称为其他东西。即使它是针对Python3.x的,如果他们是针对2.x发行的,他们也应该想一想,把它叫做别的东西对他们没有什么坏处,而把它叫做
object
他们会制造问题。完全同意。那种设计是灾难性的!至于设计,我也完全同意。他们还使用函数重新定义了type
,因此类NewClass(type):
也不可能。无论如何,感谢您抽出时间阅读手册并指出我遗漏的内容。
>>> 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__()
[]