如何在python对象中覆盖__type__方法?

时间:2019-07-03 23:28:32

标签: python

我为一些数学计算创建了一个Python类。在该对象中,我试图更改type( type )方法的结果。我的尝试失败了。

当我尝试对出现的对象使用type()方法时 <class '__main__.MyClassName'> 我在方法中重写了类型方法:

class MyMathOBJ():
.   
.
.
    def __type__(self):
        return "MyMathOBJ"

但是当我这样做时,什么都没有改变。相同的结果。我只期待那个结果MyMathOBJ

1 个答案:

答案 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