我希望能够做到:
>>> class a(str):
... pass
...
>>> b = a()
>>> b.__class__ = str
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __class__ assignment: only for heap types
答案 0 :(得分:8)
我用这种方式解决了它:
>>> class C(str):
... def __getattribute__(self, name):
... if name == '__class__':
... return str
... else:
... return super(C, self).__getattribute__(name)
...
>>> c = C()
>>> c.__class__
<type 'str'>
答案 1 :(得分:6)
Python 2没有统一的对象层次结构(即,并非所有内容都来自对象类)。任何属于此层次结构的东西都可以通过__class__
来播放,但那些不能以这种方式(或者根本就是真的)进行修改。这些被称为Python的“类型”,它们在C中被硬编码。类型的示例包括str
,int
,float
,list
,{{1}这意味着您不能以与类相同的方式使用类型,例如,您无法更改类型实例的类,您无法添加,删除或修改类型的方法等。以下脚本显示类型之间的行为差异,例如tuple
(硬编码,非动态C构造)和我称为A和B的类(可变,动态,Python构造):
str
答案 2 :(得分:0)
只有使用class
关键字定义的类才可用于__class__
属性分配:
>>> class C:
pass
>>> class D:
pass
>>> C().__class__ = D
>>>
答案 3 :(得分:0)
我尝试过这种方式!
>>> class C(str):
... __class__ = str
...
>>> c = C()
>>> c.__class__
<class 'str'>