我为一些数学计算创建了一个Python类。在该对象中,我试图更改type( type )方法的结果。我的尝试失败了。
当我尝试对出现的对象使用type()方法时
<class '__main__.MyClassName'>
我在方法中重写了类型方法:
class MyMathOBJ():
.
.
.
def __type__(self):
return "MyMathOBJ"
但是当我这样做时,什么都没有改变。相同的结果。我只期待那个结果MyMathOBJ
。
答案 0 :(得分:7)
您似乎从根本上误解了type
的所作所为。 type
本身只是一个类,一个 metaclass 。当您在实例上调用type
时,它将返回与该实例相对应的类对象,几乎等同于instance.__class__
。但是,您只想更改类对象在打印时表示的方式,因此您需要为MyMathOBJ
实现一个元类,该元类将覆盖对象中的__repr__
元类来完成此任务。
这是您完成实际尝试做的事情的方式:
In [12]: class PrettyType(type):
...: def __repr__(self):
...: return self.__name__
...:
In [13]: class MyMathOBJ(metaclass=PrettyType):
...: pass
...:
In [14]: obj = MyMathOBJ()
In [15]: obj
Out[15]: <MyMathOBJ at 0x1060cbcc0>
In [16]: type(obj)
Out[16]: MyMathOBJ