首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能否在zope.interface中声明一个类型为类型的属性?

我能否在zope.interface中声明一个类型为类型的属性?
EN

Stack Overflow用户
提问于 2014-05-30 15:36:33
回答 1查看 122关注 0票数 0

我使用zope.interface模块来声明带有一些方法和属性的接口。而且,我不能以某种方式声明属性名,而且声明它们的类型吗?

代码语言:javascript
复制
from zope.interface import Interface, Attribute, implementer, verify

class IVehicle(Interface):
    """Any moving thing"""
    speed = Attribute("""Movement speed""") #CANNOT I DECLARE ITS TYPE HERE?
    def move():
        """Make a single step"""
        pass
EN

回答 1

Stack Overflow用户

发布于 2014-05-30 16:06:49

您可以通过引入invariant来限制属性的类型。

代码语言:javascript
复制
from zope.interface import Interface, Attribute, implementer, verify, invariant

def speed_invariant(ob):
    if not isinstance(ob.speed, int):
       raise TypeError("speed must be an int")

class IVehicle(Interface):
    """Any moving thing"""
    speed = Attribute("""Movement speed""")
    invariant(speed_invariant)

    def move():
        """Make a single step"""
        pass

您的IVehicle类有一个validateInvariants方法,您可以调用它来验证实现它的类中没有任何不变量被破坏。

代码语言:javascript
复制
IVehicle.validateInvariants(vechile_instance)

不过,我不知道如何直接指定属性的类型。

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

https://stackoverflow.com/questions/23958295

复制
相关文章

相似问题

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