Как переопределить метод __type__ в объекте python? - PullRequest
4 голосов
/ 04 июля 2019

Я создаю класс Python для некоторых математических вычислений.В этом объекте я пытаюсь изменить тип ( type ) методов результата.И мои попытки не увенчались успехом.

Когда я пытаюсь вызвать метод type () для моего объекта, который появляется <class '__main__.MyClassName'>, я переопределяю метод type в моем методе:

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

Но когда я это делаю, ничего не меняется,Тот же результат.Я ожидал именно этого результата MyMathOBJ.

1 Ответ

7 голосов
/ 04 июля 2019

Вы, похоже, в корне не понимаете, что делает 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...