当前位置: 首页 > 面试题库 >

可以在python中更改函数的repr吗?

晏正豪
2023-03-14
问题内容

我只看到了__repr__在类定义中设置方法的示例。是否__repr__可以在其定义中或定义它们后更改for函数?

我尝试没有成功…

>>> def f():
    pass
>>> f
<function f at 0x1026730c8>
>>> f.__repr__ = lambda: '<New repr>'
>>> f
<function __main__.f>

问题答案:

是的,如果您愿意放弃该功能实际上是一个功能。

首先,为我们的新类型定义一个类:

import functools
class reprwrapper(object):
    def __init__(self, repr, func):
        self._repr = repr
        self._func = func
        functools.update_wrapper(self, func)
    def __call__(self, *args, **kw):
        return self._func(*args, **kw)
    def __repr__(self):
        return self._repr(self._func)

添加装饰器功能:

def withrepr(reprfun):
    def _wrap(func):
        return reprwrapper(reprfun, func)
    return _wrap

现在我们可以定义repr和函数了:

@withrepr(lambda x: "<Func: %s>" % x.__name__)
def mul42(y):
    return y*42

现在repr(mul42)生产'<Func: mul42>'



 类似资料:
  • Python 内置函数 描述 repr() 函数将对象转化为供解释器读取的形式。 语法 以下是 repr() 方法的语法: repr(object) 参数 object -- 对象。 返回值 返回一个对象的 string 格式。 实例 以下展示了使用 repr() 方法的实例:>>>s = 'RUNOOB' >>> repr(s) "'RUNOOB'" >>> dict = {'runoob'

  • repr函数用来取得对象的规范字符串表示。反引号(也称转换符)可以完成相同的功能。注意,在大多数时候有eval(repr(object)) == object。 >>> i = [] >>> i.append('item') >>> `i` "['item']" >>> repr(i) "['item']" 基本上,repr函数和反引号用来获取对象的可打印的表示形式。你可以通过定义类的__repr

  • 问题内容: 对象的可评估字符串表示形式(可以它,这意味着它是评估为Python对象的字符串表示形式) 换一种说法: 问题: 为什么我得到双引号?(这样做的时候我不懂) 为什么我得到时却得到而不是是对象? 问题答案: 因此,名称x将附加到字符串。例如,当你致电时,解释器放而不是,x然后致电。 实际调用一个魔术方法的,这给串包含该值的表示分配给。因此,它会在字符串”“中返回结果”。的想法是给出一个包含

  • 问题内容: 如果我有一个带字符( )的字符串,则此字符串的函数将返回。 有没有办法进行反向操作:如果我有string (带字符 ),我需要获得string 。 问题答案: 我认为您正在寻找的是:

  • 问题内容: 在Python中,是否可以在运行时重新定义函数的默认参数? 我在这里定义了带有3个参数的函数: 接下来,我尝试(未成功)设置y的默认参数值,然后尝试调用不带参数的函数: 但是由于未正确设置默认值,所以产生了以下错误: 正如我在此尝试的那样,是否可以在运行时重新定义函数的默认参数? 问题答案: 只需使用functools.partial 这里的一个问题:您将无法调用它,因为您应该手动说

  • 问题内容: python 2.7.5和函数之间的区别是什么? python.org上的说明: 该功能是指以返回其是相当值的表示 人类可读 ,而意在产生可以表示 由解释器读取 (或将强制如果没有相当的语法) 但这对我来说还不清楚。 一些例子: 所以我想知道以下 什么时候应该使用?什么时候应该使用? 在哪种情况下我可以使用它们中的任何一个? 做什么不能做? 做什么不能做? 问题答案: 我什么时候应该使