【发布时间】:2012-12-21 08:40:01
【问题描述】:
我不明白为什么下面的代码会以特定方式运行,如下所述:
from abc import ABCMeta
class PackageClass(object):
__metaclass__ = ABCMeta
class MyClass1(PackageClass):
pass
MyClass2 = type('MyClass2', (PackageClass, ), {})
print MyClass1
print MyClass2
>>> <class '__main__.MyClass1'>
>>> <class 'abc.MyClass2'>
为什么repr(MyClass2) 说abc.MyClass2(顺便说一句,这不是真的)?
谢谢!
【问题讨论】:
-
这里的项目结构似乎完全无关紧要。我建议删除该部分并将其全部作为 1 个模块(所描述的行为仍然存在)。
-
@mgilson 感谢您的关注,已更新。
-
而且,作为旁注,这种行为在 python3.x 中仍然存在(我刚刚测试过)
-
@mgilson 它不在我的系统上 - 我使用 cpython 3.1、3.2 和 3.3 得到
<class '__main__.MyClass2'> .。 -
更简单的测试用例:
type('bar', (ABCMeta('foo', (object,), {}),), {})
标签: python class python-import abc