<unbound method Pizza.get_size>
, 也就是说这个方法并没有被绑定到一个 object 对象上。所以其不能单独执行。其应该绑定一个 Pizza 的对象(传入 Pizza 对象参数),然后执行。Pizza.get_size
被绑定到了新建的对象上。get_size()
方法,因为它的 self
参数已经自动被设置成了 Pizza 的实例(Pizza 实例已经被隐式的传递给 get_size
方法)get_size
这个方法已经绑定到了 Pizza 实例上,绑定后我们获取方法名就足够了get_radius
方法,否则就会抛出异常。但是问题是,如果我们在继承类中忘记实现该方法,那么当我们调用该方法的时候,就会抛出异常。abc
module 使得异常抛出得更早一些,在类创建的时候,就报错,而不是等待使用该方法时才报错。abstractmethod
的装饰器,一旦我们想要对 baseclass 或者继承自 baseclass 但是没有实现 abstractmethod 的类进行实例化时,就会报错classmethod
和 staticmethod
都可以装饰抽象方法。In Python, contrary to methods in Java interfaces, you can have code in your abstract methods and call it via super():