0

我正在使用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
4

1 回答 1

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)

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

于 2014-05-30T16:06:49.000 回答