标签:属性 one pre abstract metaclass str obj 设计 color
通过__slots__限制对象可添加的属性
class A: __slots__ = [‘a‘, ‘b‘] pass a1 = A() a1.a = 10 print(a1.a) a1.c = 0 # 只能添加a,b属性添加其他属性就报错
没有约束
class Alipay: def pay(self, money): print(‘此次消费%s‘ % money) class QQpay: def pay(self, money): print(‘此次消费%s‘ % money) def pay(obj, money): obj.pay(money)
弱约束
class Pay: # 弱约束 def pay(self, money): pass class Alipay(Pay): def pay(self, money): print(‘此次消费%s‘ % money) class QQpay(Pay): def pay(self, money): print(‘此次消费%s‘ % money) class Wechatpay(Pay): def fuqian(self, money): # 不规范,不报错 print(‘此次消费%s‘ % money) # class Wechatpay: # def pay(self, money): # 规范统一 # print(‘此次消费%s‘ % money) def pay(obj, money): obj.pay(money) a1 = Alipay() q1 = QQpay() c1 = Wechatpay() # a1.pay(100) # q1.pay(200) pay(a1, 100) pay(q1, 200) pay(c1, 300)
强制约束
方法一、若不实现父类方法主动主动抛出异常进行约束
# 这个父类制定了一个约束,规范,子类一定要有pay方法。 class Pay: def pay(self, money): # 主动抛异常 raise Exception(‘未定义pay方法‘) class Alipay(Pay): def pay(self, money): print(‘此次消费%s‘ % money) class QQpay(Pay): def pay(self, money): print(‘此次消费%s‘ % money) class Wechatpay: def pay(self, money): print(‘此次消费%s‘ % money) class Unitypay(Pay): def fuqian(self, money): # 没实现父类方法 print(‘此次消费%s‘ % money) def pay(obj, money): # 归一化设计 obj.pay(money) a1 = Alipay() q1 = QQpay() c1 = Wechatpay() d1 = Unitypay() # a1.pay(100) # q1.pay(200) # pay(a1, 100) # pay(q1, 200) # pay(c1, 300) pay(d1, 200) # 没实现父类方法在此处抛异常
方法二、利用模块,如果子类不实现父类方法在实例化时就报错
from abc import abstractmethod from abc import ABCMeta class Pay(metaclass=ABCMeta): # 抽象类,在实例化就报错 @abstractmethod # 定一个约束,规范,约束子类中一定要有pay方法 def pay(self, money): pass class Alipay(Pay): def pay(self, money): print(‘此次消费%s‘ % money) class QQpay(Pay): def pay(self, money): print(‘此次消费%s‘ % money) class Wechatpay: def pay(self, money): print(‘此次消费%s‘ % money) class Unitypay(Pay): def fuqian(self, money): # 没实现父类方法 print(‘此次消费%s‘ % money) def pay(obj, money): obj.pay(money) a1 = Alipay() q1 = QQpay() c1 = Wechatpay() d1 = Unitypay() # 没实现父类方法,实例化时就报错 # a1.pay(100) # q1.pay(200) # pay(a1, 100) # pay(q1, 200) # pay(c1, 300) pay(d1, 200)
标签:属性 one pre abstract metaclass str obj 设计 color
原文地址:https://www.cnblogs.com/chen55555/p/10284331.html