• 类补充


      1 #!/usr/bin/env python
      2 # -*- coding:utf-8 -*-
      3 
      4 ###########接口######################
      5 # class Iorderddd():
      6 #     def fetch_one_by(self,nid):
      7 #         raise Exception('子类必须实现该方法')
      8 #
      9 # class aaa(Iorderddd):
     10 #     def fetch_one_by(self, nid):
     11 #         print(nid)
     12 # aa = aaa()
     13 # aa.fetch_one_by(1)
     14 
     15 ###########抽象类,抽象方法######################
     16 # import abc
     17 # class Foo(metaclass=abc.ABCMeta):
     18 #     def f1(self):
     19 #         print('123')
     20 #
     21 #     @abc.abstractmethod
     22 #     def f2(self):
     23 #         '''
     24 #
     25 #         :return:
     26 #         '''
     27 #
     28 # class Bar(Foo):
     29 #     def f2(self):
     30 #         print('3333')
     31 #
     32 # b = Bar()
     33 # b.f2()
     34 ###########组合######################
     35 # class Foo:
     36 #     def f1(self):
     37 #         pass
     38 #     def f2(self):
     39 #         pass
     40 #
     41 # class SqlHelper:
     42 #     def __init__(self,f):
     43 #         self.f = f
     44 #     def fetch_one(self):
     45 #         self.f.f1()
     46 #     def fetch_all(self):
     47 #         pass
     48 # class UserInfo:
     49 #     def __init__(self,helper):
     50 #         self.s = helper
     51 #     def login(self):
     52 #         self.s.fetch_one()
     53 #     def loginout(self):
     54 #         self.s.fetch_one()
     55 #     def userlist(self):
     56 #         self.s.fetch_all()
     57 # f = Foo()
     58 # b = SqlHelper(f)
     59 # obj = UserInfo(b)
     60 # obj.login()
     61 # 类作为参数传入到另一个类中,降低耦合
     62 
     63 ########## 类创建的本质######################
     64 # class Foo:
     65 #     def __init__(self):
     66 #         self.name = 123
     67 #     def f1(self):
     68 #         print('f1')
     69 # # 解释器执行步骤
     70 # # 1、遇到class Foo 执行Type的__init__方法
     71 # # 2、type的init方法。。。
     72 # obj = Foo()
     73 # 3、执行type的__call__方法
     74 #       执行Foo类的__new__方法
     75 #       执行Foo类的__init__方法
     76 
     77 ########## 自定义type######################
     78 # class MyType(type):
     79 #     def __call__(cls, *args, **kwargs):
     80 #         obj = cls.__new__(cls,*args,**kwargs)
     81 #         print('==========')
     82 #         obj.__init__(*args,**kwargs)
     83 #         return obj
     84 # class Foo(metaclass=MyType):
     85 #     def __init__(self,name):
     86 #         print('---------')
     87 #         self.name = name
     88 #     def f1(self):
     89 #         print(self.name)
     90 # obj = Foo(123)
     91 # print(obj)
     92 # print(obj.name)
     93 ########## 依赖注入######################
     94 class Mapper:
     95     __mapper_relation ={}
     96     @staticmethod
     97     def register(cls,value):
     98         Mapper.__mapper_relation[cls]=value
     99     @staticmethod
    100     def exist(cls):
    101         if cls in Mapper.__mapper_relation:
    102             return True
    103         return False
    104     @staticmethod
    105     def value(cls):
    106         return Mapper.__mapper_relation[cls]
    107 class MyType(type):
    108     def __call__(cls, *args, **kwargs):
    109         obj = cls.__new__(cls,*args,**kwargs)
    110         arg_list = list(args)
    111         if Mapper.exist(cls):
    112             value = Mapper.value(cls)
    113             arg_list.append(value)
    114         obj.__init__(*arg_list,**kwargs)
    115         return obj
    116 class Foo(metaclass=MyType):
    117     def __init__(self,name):
    118         self.name = name
    119     def f1(self):
    120         print(self.name)
    121 
    122 class Bar(metaclass=MyType):
    123     def __init__(self,name):
    124         self.name = name
    125     def f1(self):
    126         print(self.name)
    127 Mapper.register(Foo,'666')
    128 Mapper.register(Bar,'999')
    129 f = Foo()
    130 print(f.name)
    131 b= Bar()
    132 print(b.name)
    133 ##############程序设计原则#############
    134 '''SOLIP设计原则
    135   1、单一责任原则(SRP)
    136     一个对象对只应该为一个元素负责
    137   2、开放封闭原则(OCP)
    138     对扩展开放,修改封闭
    139   3、里氏替换原则(LSP)
    140     可以使用任何派生类替换基类
    141   4、接口分离原则(ISP)
    142     对于接口进行分类避免一个接口的方法过多
    143   5、依赖倒置原则(DIP)
    144     隔离关系,使用接口或抽象类代指
    145   6、依赖注入(DI)和控制反转原则(ICO)
    146     使用钩子再原来执行流程中注入其他对象
    147 '''
  • 相关阅读:
    MySQL基础之 排序与限制,聚合
    AWS服务学习
    SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-006-定义切面使用xml
    SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-005-定义切面使用@Aspect、@EnableAspectJAutoProxy、<aop:aspectj-autoproxy>
    SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-004-使用AspectJ’s pointcut expression language定义Pointcut
    SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-003-Spring对AOP支持情况的介绍
    SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-002-AOP术语解析
    SPRING IN ACTION 第4版笔记-第四章Aspect-oriented Spring-001-什么是AOP
    SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-009-用SPEL给bean运行时注入依赖值
    SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-008-SpEL介绍
  • 原文地址:https://www.cnblogs.com/Erick-L/p/6821468.html
Copyright © 2020-2023  润新知