python 3打印函数名称

时间:2019-01-11 21:57:29

标签: python python-3.x string function

我已经接受@dtanabe对这个问题的回答 这是我的代码

def abc(): pass
x = abc
class label:
    def __init__(self,fnname):
        self.lbl = fnname
    def __repr__(self):
        repr(self.lbl)
    def __str__(self):
        # how should this be defined?
        # I have no objection if other class functions
        # or variables need to be defined

u = label(x)

我希望print(u)在屏幕上以abc(三个字符)做出响应,而print([u])在屏幕上以[abc](五个字符)做出响应。在这两种情况下,我都不想在屏幕上看到长度为3或5的字符串附近的任何单引号或双引号。

当然,我想要函数abcdefg的类似行为,其中print(u)会在屏幕上产生abcdefg,而print([u])会引起{{1 }}。

您的答案允许更改类的定义,但不允许更改类定义之外的任何内容。

1 个答案:

答案 0 :(得分:1)

请勿在您的repr()实现中使用__repr__,因为那会加上引号:

def myFunction(): pass

some_ref_to_a_func = myFunction

class Label:
    def __init__(self, value):
        self.value = value
    def __repr__(self):
        return self.value.__name__
    def __str__(self):
        return self.value.__name__

x = Label(some_ref_to_a_func)
print(x)  # prints: some_ref_to_a_func