首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在zope.interface中声明@staticmethod

如何在zope.interface中声明@staticmethod
EN

Stack Overflow用户
提问于 2015-03-21 16:09:59
回答 1查看 194关注 0票数 1

我尝试使用@staticmethod和@classmethod创建接口。声明类方法很简单。但是我找不到正确的方法来声明静态方法。

考虑类接口及其实现:

代码语言:javascript
复制
#!/usr/bin/python3
from zope.interface import Interface, implementer, verify


class ISerializable(Interface):

    def from_dump(slice_id, intex_list, input_stream):
        '''Loads from dump.'''

    def dump(out_stream):
        '''Writes dump.'''

    def load_index_list(input_stream):
        '''staticmethod'''


@implementer(ISerializable)
class MyObject(object):

    def dump(self, out_stream):
        pass

    @classmethod
    def from_dump(cls, slice_id, intex_list, input_stream):
        return cls()

    @staticmethod
    def load_index_list(stream):
        pass

verify.verifyClass(ISerializable, MyObject)
verify.verifyObject(ISerializable, MyObject())
verify.verifyObject(ISerializable, MyObject.from_dump(0, [], 'stream'))

输出:

代码语言:javascript
复制
Traceback (most recent call last):
  File "./test-interface.py", line 31, in <module>
    verify.verifyClass(ISerializable, MyObject)
  File "/usr/local/lib/python3.4/dist-packages/zope/interface/verify.py", line 102, in verifyClass
    return _verify(iface, candidate, tentative, vtype='c')
  File "/usr/local/lib/python3.4/dist-packages/zope/interface/verify.py", line 97, in _verify
    raise BrokenMethodImplementation(name, mess)
zope.interface.exceptions.BrokenMethodImplementation: The implementation of load_index_list violates its contract
        because implementation doesn't allow enough arguments.

如何在这个接口中正确声明静态方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-21 16:41:04

显然,verifyClass没有正确地理解classmethodstaticmethod。问题是,在Python3中,如果在Python3中执行getattr(MyObject, 'load_index_list'),就会得到一个空函数,而verifyClass认为它是另一个未绑定的方法,然后期望隐式self是第一个参数。

最简单的解决方法是在那里使用classmethod而不是staticmethod

我想有人也可以做窃听器报告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29184884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档