Ale*_*hko 2 python metaclass python-datamodel
我正在为Squish Automation Tool使用python语言.这个工具扩展了python与一些自定义对象和函数.这就是他们在手册中所说的:
Squish的Python特定扩展模块通过内部执行以下语句的等效内容自动加载:
Run Code Online (Sandbox Code Playgroud)Python import test import testData import object import objectMap import squishinfo from squish import *这意味着除非您正在开发自己的独立模块,否则无需自行导入它们.
通过这样做,他们object自动重新定义(对此),所以我尝试做新式类(如class NewClass(object):)会给我一个错误:
TypeError:调用元类库时出错.
module.__init__()最多需要2个参数(给出3个)
所以我想要object退缩.在阅读了关于元类的惊人文章之后,我正试图object使用以下代码:
class OrigObject:
__metaclass__ = type
class NewClass(OrigObject):
pass
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否与继承原始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__()
[]
Run Code Online (Sandbox Code Playgroud)
虽然,我会注意到,我认为这对于所述模块的创建者来说是一个非常糟糕的决定,他们应该称之为其他东西.即使它针对的是Python 3.x,如果它们将它分发为2.x,它们应该考虑一下,它会把它称为别的东西并没有坏处,并且通过调用object它们会产生问题.
| 归档时间: |
|
| 查看次数: |
1385 次 |
| 最近记录: |