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

class方法上的functools.partial

琴俊人
2023-03-14
问题内容

我正在尝试使用另一个更通用的类方法来定义一些类方法,如下所示:

class RGB(object):
    def __init__(self, red, blue, green):
        super(RGB, self).__init__()
        self._red = red
        self._blue = blue
        self._green = green

    def _color(self, type):
        return getattr(self, type)

    red = functools.partial(_color, type='_red')
    blue = functools.partial(_color, type='_blue')
    green = functools.partial(_color, type='_green')

但是,当我尝试调用其中任何一种方法时,都会得到:

rgb = RGB(100, 192, 240)
print rgb.red()
TypeError: _color() takes exactly 2 arguments (1 given)

我想_colorrgb.red(rgb)工作以来,自我并没有传递给自己。


问题答案:

您正在 函数 上创建局部 函数
,而不是方法上。functools.partial()对象不是描述符,它们本身不会添加self参数,也不能自己充当方法。您 只能
包装绑定的方法或函数,它们对于未绑定的方法根本不起作用。这是记录:

partial对象就像function对象一样,它们是可调用的,弱引用的,并且可以具有属性。有一些重要的区别。例如,__name____doc__属性不会自动创建。同样,partial在类中定义的对象的行为类似于静态方法,并且在实例属性查找期间不会转换为绑定方法。

使用propertys代替;这些 描述符:

class RGB(object):
    def __init__(self, red, blue, green):
        super(RGB, self).__init__()
        self._red = red
        self._blue = blue
        self._green = green

    def _color(self, type):
        return getattr(self, type)

    @property
    def red(self): return self._color('_red')
    @property
    def blue(self): return self._color('_blue')
    @property
    def green(self): return self._color('_green')

从Python
3.4开始,您可以在此处使用新functools.partialmethod()对象。绑定到实例时,它将做正确的事情:

class RGB(object):
    def __init__(self, red, blue, green):
        super(RGB, self).__init__()
        self._red = red
        self._blue = blue
        self._green = green

    def _color(self, type):
        return getattr(self, type)

    red = functools.partialmethod(_color, type='_red')
    blue = functools.partialmethod(_color, type='_blue')
    green = functools.partialmethod(_color, type='_green')

但是这些property对象必须被调用,而对象可以用作简单属性。



 类似资料:
  • 问题内容: 这是代码段: 之后遇到错误: 所有其他方法都可以正常工作。试图进行大量研究但徒劳无功。任何线索将不胜感激 问题答案: 这表明Spark版本不匹配。在Spark 2.3 方法之前,仅接受两个参数: 从2.3开始,它需要三个参数: 在您的情况下,Python客户端似乎调用了后者,而JVM后端使用了较旧的版本。 由于初始化在2.4中进行了重大更改,这将导致上的失败,因此您可能使用: 2.3.

  • 本文向大家介绍Java中通过Class类获取Class对象的方法详解,包括了Java中通过Class类获取Class对象的方法详解的使用技巧和注意事项,需要的朋友参考一下 前言 本文主要给大家介绍的是关于Java通过Class类获取Class对象的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 阅读API的Class类得知,Class 没有公共构造方法。Class 对象是

  • 本文向大家介绍Python class的继承方法代码实例,包括了Python class的继承方法代码实例的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Python class的继承方法代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 运行结果: 还可以写成: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支

  • 本文向大家介绍python3.6使用pickle序列化class的方法,包括了python3.6使用pickle序列化class的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇python3.6使用pickle序列化class的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 本文向大家介绍JavaScript实现获取dom中class的方法,包括了JavaScript实现获取dom中class的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript实现获取dom中class的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。

  • 本文向大家介绍startup class的configure方法有什么作用?相关面试题,主要包含被问及startup class的configure方法有什么作用?时的应答技巧和注意事项,需要的朋友参考一下 这个方法来定义整个应用如何响应HTTP请求。它有几个比较重要的参数,application builder,Hosting environment, logo factory, 在这里我们可以