我不能在zope.interface中声明一个带有类型的属性吗?

时间:2014-05-30 15:36:34

标签: python zope.interface

我使用zope.interface模块来声明具有某些方法和属性的接口。另外,我不能以某种方式声明属性名称,还要声明类型?

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

1 个答案:

答案 0 :(得分:1)

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

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方法,你可以调用它来验证在实现它的类中没有任何不变量被破坏。

IVehicle.validateInvariants(vechile_instance)

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