python中抽象类和抽象方法_在Python中定义和使用 抽象类及抽象方法 抽象属性

原文链接:http://www.jb51.net/article/87710.htm

本文根据自己的理解和思考,对原文略有改动。。。

Python中我们可以使用abc模块来构建抽象类。在讲抽象类之前,先说下抽象方法的实现。

抽象方法是基类中定义的方法,但却没有任何实现。在python中实现一个抽象方法的简单的方法是:

class Sheep(object):

def __init__(self):

print '__init__ is called!'

def get_size(self):

raise NotImplementedError

s=Sheep()#生成一个实例。注意实例化时,并没有抛出错误

s.get_size()#只有调用该方法时才会抛出错误任何从Sheep继承下来的子类必须实现(重写)get_size方法,否则就会抛出一个错误。

但这种实现方法有个缺点:定义的子类只有调用那个方法时才会抛错。

这里有个简单方法可以在类被实例化时触发它:使用python提供的abc模块。

import abc

class Sheep(object):

__metaclass__ = abc.ABCMeta

@abc.abstractmethod

def get_size(self):

return

class sheepson(Sheep):

def __init__(self):

print 'sheepson.__init__ is called!'

s1=Sheep() #报错,不能实例化抽象类

s2=sheepson()#报错,不能实例化抽象类这里实例化Sheep类或实例化任意从其继承的子类(未实现get_size)时候都会抛出异常。

因此,通过定义抽象类,可以定义子类的共同method(强制其实现)。

如何使用抽象类:

import abc

class A(object):

__metaclass__ = abc.ABCMeta

@abc.abstractmethod

def load(self, input):

return

@abc.abstractmethod

def save(self, output, data):

return通过ABCMeta元类来创建一个抽象类, 使用abstractmethod装饰器来表明抽象方法

注册具体类:

import abc

class A(object):

__metaclass__ = abc.ABCMeta

@abc.abstractmethod

def load(self, input):

return

@abc.abstractmethod

def save(self, output, data):

return

class B(object):

def load(self, input

你可能感兴趣的:(python中抽象类和抽象方法)