как использовать имя метода класса внутри самого метода? - PullRequest
0 голосов
/ 27 апреля 2018

Есть ли лучший способ получить имя функции внутри класса.

Я бы хотел получить и <str> "A.boo" без использования оператора self.boo.

это тот самый test.py, который я пробежал

import sys
import traceback

def foo():
    print(foo.__name__)
    print(foo.__qualname__)
    print(sys._getframe().f_code.co_name)
    print(traceback.extract_stack()[-2])


foo()

class A:
    def boo(self):
        print(self.boo.__name__)
        print(self.boo.__qualname__)
        print(sys._getframe().f_code.co_name)
        print(traceback.extract_stack()[-2])

A().boo()

выход:

$ python test.py
foo
foo
foo
<FrameSummary file test.py, line 12 in <module>>
boo
A.boo
boo
<FrameSummary file test.py, line 21 in <module>>

1 Ответ

0 голосов
/ 27 апреля 2018
import inspect


class A:
    def boo(self):
        print(self.__class__.__name__, end=“.”)
        print(inspect.currentframe().f_code.co_name)

Другой способ:

from decorator import decorator

@decorator
def prints_merhod_name(method, *args, **kwargs):
    self = args[0]
    print(self.__class__.__name__, method.__name__, sep=“.”)
    return method(*args, **kwargs)


class A:
    @prints_method_name
    def foo(self):
    whatever
...