栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

“静态方法”对象不可调用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

“静态方法”对象不可调用

您正在将 未绑定的

staticmethod
对象存储在字典中。通过访问名称作为类或实例上的属性,此类对象(以及
classmethod
对象,函数和
property
对象)仅通过描述符协议进行绑定。直接访问
staticmethod
类主体中的对象不是属性访问。

创建类 之后 创建字典(以便您将它们作为属性访问),或者显式绑定,或者在将它们存储在字典中之前提取原始函数。

注意,对

staticmethod
对象的“绑定”仅意味着仅忽略上下文。绑定
staticmethod
将不变地返回基础函数。

因此,您的选择是使用属性取消缩进字典并触发描述符协议:

class A(object):    @staticmethod    def open():        return 123    @staticmethod    def proccess():        return 456A.switch = {    1: A.open,    2: A.proccess,   }

或显式绑定,传入一个虚拟上下文(无论如何将被忽略):

class A(object):    @staticmethod    def open():        return 123    @staticmethod    def proccess():        return 456    switch = {        1: open.__get__(object),        2: proccess.__get__(object),       }

或直接使用

__func__
属性访问基础函数:

class A(object):    @staticmethod    def open():        return 123    @staticmethod    def proccess():        return 456    switch = {        1: open.__func__,        2: proccess.__func__,       }

但是,如果您要做的只是为一堆函数提供 名称空间 ,则不应首先使用类对象。将功能放在 模块中
。这样,您不必

staticmethod
首先使用装饰器,也不必再次拆开它们。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/617647.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号