我已经接受@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 }}。
您的答案允许更改类的定义,但不允许更改类定义之外的任何内容。
答案 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