在Python接口中定义属性是个好主意吗?

时间:2013-02-01 11:37:48

标签: python interface

在这样的界面中定义属性是一个好习惯吗?

class MyInterface(object):
    def required_method(self):
        raise NotImplementedError

    @property
    def required_property(self):
        raise NotImplementedError

1 个答案:

答案 0 :(得分:3)

我会使用ABC class,但是是的;您甚至可以使用@abstractproperty来处理该用例。

from abc import ABCMeta, abstractproperty, abstractmethod

class MyInterface(object):
    __metaclass__ = ABCMeta

    @abstractmethod
    def required_method(self):
        pass

    @abstractproperty
    def required_property(self):
        pass

ABC的子类仍然可以自由地实现required_property作为属性; ABC只会验证required_property的存在,而不是它的类型。