抽象类
1.抽象类的意义是?或者说为什么要有抽象类?
抽象类是对多个类中共同方法的抽取,但是子类又有不同的实现,父类只能抽取出方法的名字,而不明确方法的具体实现.
这种只规定子类拥有哪些方法,而不明确具体实现的父类,就应该定义为抽象类.
抽象类只用来规范子类应该具有哪些行为,而不明确具体的动作.
2.抽象类的特点是?
抽象类和普通类的最主要区别在于:
1.抽象类继承的()中写的是metaclass=ABCMeta
2.在类体中有用@abstractmethod修饰的方法(需要子类重写的方法)
3.抽象类中是否可以有非抽象方法?
可以.
4.抽象类中的抽象方法是否可以有方法体?
可以.
5.抽象类中是否可以有__init__方法?为什么?
可以,因为抽象类中也可以有实例属性供子类继承.
而实例属性必须在父类中初始化,子类对象才能继承.
抽象类的__init__方法不能手动调用,只能是子类创建对象时自动调用的.
6.代码
from abc import ABCMeta, abstractmethod
class Payment(metaclass=ABCMeta):
def __init__(self, name, money):
self.name = name
self.money = money
@abstractmethod
def pay(self): pass
@abstractmethod
def back(self): pass
class Wechatpay(Payment):
def pay(self):
print('%s使用微信支付了%s元' % (self.name, self.money))
def back(self):
print('退款')
class Alipay(Payment):
def pay(self):
print('%s使用支付宝支付了%s元' % (self.name, self.money))
def back(self):
print('退款')
class Applepay(Payment):
def pay(self):
print('%s使用苹果支付了%s元' % (self.name, self.money))
def back(self):
print('退款')
def pay(person):
person.pay()
ap = Applepay('alex', 20000)
pay(ap)