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

Was*_*ser 4 python

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

当我尝试为出现的对象使用type()方法时,我 <class '__main__.MyClassName'> 在方法中覆盖了type方法:

class MyMathOBJ():
.   
.
.
    def __type__(self):
        return "MyMathOBJ"
Run Code Online (Sandbox Code Playgroud)

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

jua*_*aga 7

您似乎从根本上误解了type。type本身只是一个类,一个元类。调用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
Run Code Online (Sandbox Code Playgroud)