类补充

  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 ‘‘‘
时间: 2024-10-22 18:38:54

类补充的相关文章

元类补充

什么是元类 ? 基于python的宗旨:一切皆对象.而对象都是由类实例化得到的 class OldboyTeacher(object): school = 'oldboy' def __init__(self,name): self.name = name def run(self): print('%s is running'%self.name) t1 = OldboyTeacher('jason') # 对象t1是由类OldboyTeacher实例化得到 那么类也是对象,它又是谁实例化得到

四(2)、复用类补充之关于代理模式的一点理解

一.关于代理模式的几个概念 1.比如A要去租房,通过中介B,租到C家的房子,这里B就是A的代理. 代理可以认为是之前介绍的组合和继承的折中模式,它有继承的部分也有组合的部分. 2.代理的结构 1)抽象主题角色: 声明了真实主题和代理主题的共同的接口. 2)代理主题角色:内部含有真实主题的引用, 从而可以再任何时候操作真实主体对象:提供了一个与真实主题相同的接口,以便可以替代真实主题. 3)真实主题角色:抽象主题的实现,是具体被代理的对象. 二.三种常见的代理模式 1.普通代理模式 1 packa

Java学习笔记21(String类补充:正则表达式)

正如python的re模块,不过Java和Python的正则表达式有一些区别,这里做简单介绍,具体的细节可以参考网上其他的文章: 功能:可以用于检验一个字符串,比如验证用户名,验证密码格式,验证是否是邮箱,等等 示例: "[0-9]{6,12}"匹配规则:6到12位的数字,比如123456789就是true,12345就是false "1[3578][0-9]{9}"匹配规则:1开头,第二位是3578中的一个,后面九个任意数字,比如13345678912就是true

面向对象高级C(元类补充及单例模式(待补充))

有些地方还有一点模棱两可,先放在这,周六抽一个上午把这个整理完 元类中 _init_: 控制类的产生,在__new__之后 _call_: 控制对象的产生 _new_: 控制类产生最根上,其实本质最根上也不是它,是type的__call_,但是我们看不到了 object.__new__(Person) #生成Person类的对象 空的 type.__new__(cls, name, bases, dic) #生成cls这个类对象,里面有东西 #模板:控制对象的产生 class Mymeta(ty

Uniity基础——Mathf类、3D数学类补充

Mathf 3D数学 1. Mathf 类 数学操作方法: 1. 角度与弧度值.正无穷大.负无穷大 Deg2Rad Rad2Deg Infinity NegativeInfinity 2. 三角函数 Sin( 30 ) Cos() ..... 3. 四舍五入.求绝对值.开平方.最大|小数. Round()|Ceil()|Floor() Abs() Sqrt() Max()|Min() --------------------------------------------------------

序列化类补充 source关键字参数 SerializerMethodField方法

models.py from django.db import models class Category(models.Model): cat_id = models.AutoField(primary_key=True) category_name = models.CharField(max_length=50) parent = models.ForeignKey(to='Category', to_field='cat_id', related_name="Category"

继承1.继承,2.属性查找顺序3.子类访问父类内容4.补充,经典类与新式类 --------- # 21

继承: 1.继承 1.1继承 1 '''''' 2 """ 3 1.什么是继承? 4 继承是描述两个对象之间,什么是什么的关系 5 6 案例:麦兜,佩奇,猪刚鬓 -- 都是猪 7 8 在程序中,继承描述的是类和类之间的关系 9 10 例如:a 继承 b,a就能直接使用b已经存在的方法或属性 11 此时,a称之为子类,b被称之为父类,也称为基类 12 13 2.为什么要使用继承? 14 继承的一方制剂使用另一方已经有的东西 15 其目的是:提高重用性(重用已有的代码) 16 1

Java学习总结(7)——(File类,IO流,(缓冲流,转换流等),Properties类)

一.File类 java.io.File类代表系统文件(文件和目录) 访问文件属性步骤 (1)创建文件对象 格式:File file=new File(String pathname); (2)调用方法:操作文件目录的属性(路径,权限,日期和时间等) File类的属性(separator默认名称分隔符) (1)在UNIX系统上,此字段的值为 '/ ';在window系统上,它为'\' (2)为了程序的跨平台性,文件的路径应该用这个属性值来代表 File类的常用方法 方法名称 说明 Boolean

面向对象:编程范式、类、对象

编程范式: 1. 面向过程编程: 核心是"过程","过程"指的是解决问题的步骤:就相当于在设计一条流水线 优点:复杂问题流程化,进而简单化 缺点:可扩展性差,前一发动全身 2. 面向对象:核心是"对象",对象就是特征与技能的结合体 优点: 可扩展性强 缺点: 编程复杂度高 应用场景: 用户需求经常变化,如:互联网应用.游戏.企业内部应用 类: 类就是一系列对象相似的特征与技能的结合体(相当于一个模板),特征用变量表示,技能用函数表示 强调: 站在