python 抽象类、抽象方法、接口、依赖注入、SOLIP
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python 抽象类、抽象方法、接口、依赖注入、SOLIP,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3652字,纯文字阅读大概需要6分钟。
内容图文
1、程序设计原则:SOLIP
SOLIP设计原则
1、单一责任原则(SRP)
一个对象对只应该为一个元素负责
2、开放封闭原则(OCP)
对扩展开放,修改封闭
3、里氏替换原则(LSP)
可以使用任何派生类替换基类
4、接口分离原则(ISP)
对于接口进行分类避免一个接口的方法过多
5、依赖倒置原则(DIP)
隔离关系,使用接口或抽象类代指
6、依赖注入(DI)和控制反转原则(ICO)
使用钩子再原来执行流程中注入其他对象
接口:
# =================================================以下是接口 class IorderRepository: ##接口 def fetch_one_by(self,nid): ‘‘‘ 获取单条数据的方法,所有的继承呢当前类的类必须继承 :param nid: :return: ‘‘‘ # raise Exception(‘子类中必须包含该方法‘) class OrderReposititory(IorderRepository): #类 def fetch_one_by(self,nid): print(nid) obj = OrderReposititory() obj.fetch_one_by(1)
抽象类抽象方法
import abc class Foo(metaclass=abc.ABCMeta): ##抽象类 def f1(self): print(123) def f2(self): print(456) @abc.abstractmethod ##抽象方法 def f3(self): ‘‘‘ ??? :return: ‘‘‘ class Bar(Foo): def f3(self): print(33333) b = Bar() b.f3()
引入依赖注入
解释器解释类的流程
# ======================================解释器解释类的流程=================== # 解释器解释: # class Foo: # def __init__(self): # self.name =123 # def f1(self): # print(self.name) # 1.遇到class Foo,执行type的__init__方法 # 2.type的init的方法做什么呢!不知道 # obj =Foo() # obj.f1() # 3.执行Type的__call__方法 # 执行Foo类的__new__方法 # 执行Foo类的__init__方法
依赖注入在什么之前做什么操作
class MyType(type): def __call__(cls, *args, **kwargs): ##执行Type的__call__方法,这里的cls就是<__main__.Foo object at 0x001B59F0> Foo类 obj = cls.__new__(cls, *args, **kwargs) ##Foo的__new__方法 print(‘-------------‘) obj.__init__(*args, **kwargs) ##在执行Foo的__init__的之前做什么操作 return obj class Foo(metaclass=MyType): def __init__(self, name): print(‘============‘) self.name = name def f1(self): print(self.name) obj = Foo(123) print(obj) print(obj.name)
#=================================依赖注入案例一====================================== class MyType(type): def __call__(cls, *args, **kwargs): ##执行Type的__call__方法,这里的cls就是<__main__.Foo object at 0x001B59F0> Foo类 obj = cls.__new__(cls, *args, **kwargs) ##Foo的__new__方法 if cls == Foo1: obj.__init__(Foo()) elif cls == Foo2: obj.__init__(Foo1()) return obj class Foo(metaclass=MyType): def __init__(self, args): print(‘============‘) self.name = args def f(self): print(self.name) class Foo1(metaclass=MyType): def __init__(self, args): print(‘============‘) self.name = args def f1(self): print(self.name) class Foo2(metaclass=MyType): def __init__(self, args): print(‘============‘) self.name = args def f2(self): print(self.name) obj = Foo2() obj.f2() # <__main__.Foo1 object at 0x002DA4F0>
#######################依赖注入案例二==================================================== # # class Mapper: # __mapper_relation = {} # # @staticmethod # def register(cls, value): # Mapper.__mapper_relation[cls] = value # # @staticmethod # def exist(cls): ###判断是否在里面 # if cls in Mapper.__mapper_relation: # return True # return False # # @staticmethod # def value(cls): # return Mapper.__mapper_relation[cls] # # # class MyType(type): # def __call__(cls, *args, **kwargs): ##执行Type的__call__方法,这里的cls就是<__main__.Foo object at 0x001B59F0> Foo类 # obj = cls.__new__(cls, *args, **kwargs) ##Foo的__new__方法 # arg_list = list(args) # if Mapper.exist(cls): # value = Mapper.value(cls) # arg_list.append(value) # obj.__init__(*arg_list, **kwargs) ##在执行Foo的__init__的之前做什么操作 # return obj # # # class Foo(metaclass=MyType): # def __init__(self, name): # self.name = name # # def f1(self): # print(self.name) # # # class Bar(metaclass=MyType): # def __init__(self, name): # self.name = name # # def f1(self): # print(self.name) # # # Mapper.register(Foo, ‘666‘) # Mapper.register(Bar, ‘999‘) # obj = Foo() # # print(obj) # print(obj.name) # b = Bar() # print(b.name) # <__main__.Foo object at 0x00583810> # 666 # 999
原文:http://www.cnblogs.com/pythonxiaohu/p/5847505.html
内容总结
以上是互联网集市为您收集整理的python 抽象类、抽象方法、接口、依赖注入、SOLIP全部内容,希望文章能够帮你解决python 抽象类、抽象方法、接口、依赖注入、SOLIP所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。