首页 > 其他分享 >06周总结

06周总结

时间:2022-11-06 19:11:06浏览次数:48  
标签:总结 06 name 对象 self 父类 方法 class

项目开发流程

项目需求分析

产品经理(甲方需求) -- 架构师 -- 开发经理
1. 架构师 负责 提前构思 需求大概需要用的技术方案,引导客户提出合理的要求 项目架构的设计
2. 决定项目所需要的编程语言  项目整体框架  数据库服务(主库,从库)
3. 项目分组开发 任务拆分
4. 各部分开始进行工作,然后自测没问题后交付测试
5. 测试通过后项目上线

项目的三层架构

第一层:数据展示层 一些前端的页面 负责展示数据和接收用户指令和输入
第二层:接口层,真正核心的业务逻辑和处理,负责处理用户的指定 然后把结果再返还给第一层
第三次:数据操作,负责针对用户数据,项目数据的存取功能,数据库的增删改查

三层架构的好处: 
1. 分工明确,出现问题也可以及时找寻问题并解决
2. 相对安全,第一层没有任何核心的代码,
3. 扩展性强,可以根据需求方便以后更改,每个功能都有独自的空间
4. 方便管理,方便大家合作创造,也方便针对每个功能调整 发现问题也方便修复
5. 数据库可变化,数据库影响核心逻辑和展示

项目实战ATM

1.三层架构创建
第一层 core文件夹 - src.PY 获取用户输入和指令 和 功能展示

第二层 interface文件夹接口层,根据不同的功能分类可以创建多个py文件,例如:用户注册 登录 可以为 user.py  购物方面 - shop.py 资金方面 - bank.py

第三层 db文件夹 - handlie.py 关于数据库操作的功能,存账号,取账号,更改数据等

公共设置: conf文件夹 - settings.py 比如一些 公共路径 公共的变量设置等等

配置功能: lib文件夹 - common.py  存放项目中 共用的 函数方法等 例如 加密方法,个别功能的装饰等等

项目日志:log文件夹 - 此文件下面用来储存项目的日志记录

启动文件:bin文件夹 - start文件 里面放 环境变量配置 和 启动指令 

这便是一个初步的 三层架构项目, 可以通过模块导入的方式让功能运转起来,也利于开发效率,需要什么功能调用什么功能即可,也可以多人协作,不同的人写不同的接口。

编程思想理论

1.面向对象编程 对象即是容器,数据与功能的结合体,python中一切皆可为对象
面向对象编程就是要创造出一个个的对象,把原本分散开的相关数据和功能整合到一个个的对象里,既方便使用,增加了耦合度 使代码可以重复利用 也增加了程序的可扩展性。例如游戏人物设计:

2.面向程序编程,过程即流程,按照流程解决问题 面向过程按照固定的流程一步一步的解决问题, 提出问题制定解决问题的方案,例如 常规的 登录 注册

类与对象

1.类:类是多个对象相同数据和功能的结合体,类主要是为了节约代码,如果有多个对象相同的数据与功能,那多个对象就属于同一个种类 类的概念
2.类的优点:可以把同一类对象相同的功能和数据放入类中,无需对每个对象都重复。这样每个对象只需要新增自己独有的数据和方法即可,即可提高了效率

类与对象的创建

1.首先要创建类 然后可以通过类产生对象
  类的语法结构:
  class 类名:
  		'''相关注释'''
    	对象的公共数据
      对象的公共功能
      
      
 class 是创建类的关键字:
 类名的命名和变量名几乎一直,唯一区别 类名首字母需要大写
 数据:其实就是变量名所绑定的数据 可以作为 类的子代码
 功能:其实就是函数 可以作为 类的子代码
  
 #类在创建好后 其实类里面的子代码已经被运行一边了,但是里面的变量名函数名都是在类的局部空间内,外界是无法直接调用的
  查看类的内部空间都有什么可用名称方法。类名.__dict__ 
  
  
2.如何创建对象
  选择一个创建好的类 然后通过这个类创建对象
  对象名 = 类()
  #类名加括号就会产生一个类的对象,一个类可以生成无数个对象,每次执行都会产生一个新的对象
  对象直接拥有类里面的 公共数据 和 公共方法 对象产生后可以直接调用类里面的方法和数据。
  #也可以使用 对象.__dict__ 方式查看该对象中都有什么数据和方法
  
  

如何给对象添加独特的数据

1.手动添加 
  obj1.__dict__['name'] = '张无忌'
  
2.在类中封装函数
  class 类名:
       公共数据
       def __init__(self,name,age, hobby):
         self.name = name
         self.age = age 
         self.hobby = hobby
          
        公共功能
        
   # 可以在产生对象的时候 通过传参的方式直接生成独有数据的对象
  
   对象名 = 类名('张无忌',18,'武功')
    
   # 当然也可以配合使用默认参数等知识
  

如何和对象添加独有的功能


  class 类名:
       公共数据
       def __init__(self,name,age, hobby):
         self.name = name
         self.age = age 
         self.hobby = hobby
         
				def 公共方法名(self):
          print(f'{self.name}')
        

   p1 = 类名('张无忌',18,'九阳神功')
   p2 = 类名('张三丰',68,'太极')
  
  
'''
定义在类中的功能,默认就是对象使用的,哪个对象调用,就和哪对象绑定,
'''
类名.公共方法名(123):
# 如果类调用自身功能,还是需要传参

p1.公共方法名()  # 张无忌
p1.公共方法名()  # 张三丰

# 对象可以直接调用类里面的方法,并且会把对象本身当作参数传入该方法中  self的意思就是默认对象本身




1.对象修改数据 和新增数据

p1.name = '周芷若'
#对象可以直接通过.的方式 直接对数据进行重新复制 修改
p1.password = '123'
# 如果没有该数据,则默认新增数据,类似字典 有就可以更改,没有就算新增

对象的动静态方法

class Fiction:
    name = '倚天屠龙记'
  	
    def func1(self):
      print('好看')
      
     @classmethod
     def func2(cls):
      	print('牛逼')
 
p1 = Fiction()
p1.func1
#对象不用传参 默认对象自己本身作为传参
Fiction.func1(111)
# 类调用函数 需要传参

动态方法:
@classmethod 修饰的函数,称之为绑定给类的方法,默认是绑定给类的,用这个方法的函数 不管是类还是对象调用,都默认传参的是类

p1.func2()  # 牛逼
Fiction.func2()  # 牛逼
#结果都是一样 不管是类还是对象调用,都是默认传入了这个类

@classmethod  绑定给类专属的方法


静态方法:
@staticmethod. 默认为普通函数,不敢类点用还是对象调用,都需要根据是否需要行参,


面向对象之继承

1.继承的含义
  	在现实生活中继承表示人与人之间资源的从属关系
   		eg:儿子继承父亲 
 	在编程世界中继承表示类与类之间资源的从属关系
    	eg:类A继承类B
    
# 在编程世界中类A继承类B就拥有了类B中所有的数据和方法使用权限

class Fiction:
    name = '倚天屠龙记'
  	
    def func1(self):
      print('好看')
      
     @classmethod
     def func2(cls):
      	print('牛逼')
        
class son(Fiction):
  pass

2.定义类时,在括号中填入其他类名,就默认新建的这个类 继承了括号中类的所有功能和数据, 
也可以同时继承多个类
class son(Fiction,Fiction2.Fiction3):
  pass


 '''
  1,继承其他类的类 叫做 子类 或者 派生类
    一般都叫子类 子类可以拥有父类的所有公共数据和方法
  2.被继承的类叫做 父类 或者 超类
    一般都叫父类
 '''

对象变量名的查找顺序

class b1:
  b = 2

class a1(b1):
  a = 1
p1 = a1()

print(p1.a)  # 1
#如果对象本身没有a 那就会用对应类中的a

p1.a = 2
print(p1.a)  # 2
# 如果对象本身有a 那优先用本身的

print(p1.b)  # 2

# 先找对象本身,然后找产生对象的类有没有,然后再找这个类的父级,以此类推 一层一层向外找, 如果整个相关的类都没有 那就报错

  ''' 对象自身 >>>> 产生对象的类 >>> 类的父类 >>> 父类的父类
      从内而外 层层寻找 优先找自身
  '''

多继承查找顺序
    class G:
        name = 'from G'
        pass
    class A:
        # name = 'from A'
        pass
    class B:
        # name = 'from B'
        pass
    class C:
        # name = 'from C'
        pass
    class D(A):
        # name = 'from D'
        pass
    class E(B):
        # name = 'from E'
        pass
    class F(C):
        # name = 'from F'
        pass

    class S1(D,E,F):
        pass
    obj = S1()
    # print(obj.name)
    
    # print(S1.mro())
    # 找名字顺序 ojb >>> S1 >>> D >>> A >>> E >>> B >>> F >>> C 
     	
'''   也可以通过关键词 mro() 方法 来查看该对象查询名称空间的顺序  
       对象自身   >>>   产生对象的类     >>>    父类(从左往右)
'''
    
 3.多继承情况下名字的查找顺序
'''
	菱形继承
    广度优先(最后才会找闭环的定点)
 非菱形继承
    深度优先(从左往右每条道走完为止)
 	ps:mro()方法可以直接获取名字的查找顺序
 	
 	
 	
!! 也可以通过关键词 mro() 方法 来查看该对象查询名称空间的顺序 !!

Python2 和 python3 中类的区别

经典类:python2中定义类时 没有 object 属性,需要手动定义
class P1(object):
  pass

新式类:python3中 无需手动添加,默认所有类都继承了object
class P1:
  pass

派生方法

派生方法就是子类基于父类的某个方法做扩展

关键字 super

class person:
  def __init__(self,name,age)
  	self.name = name 
    self.age = age 
    
class Student(person):
  def __init__(self,name,age,gender)
  #定义一个新的函数,但是里面的内容和父类已经又的重复 
  		super().__init__(self,name,age)
    # 通过super方法调用父类的方法。然后补充父类没有的即可
      self.gender = gender 
    # 然后加入新的内容
    
 p1 = Student('moon',17,'男')
 #这时候算添加完成了,可以直接用了,子类还是调用父类的方法,只不过可以添加内容了
  
  
 派生实战:

 class Mylist(list):
    def append(self,valuse):
      if valuse == 'moon'
      		return '输入错误'
		   super().append(valuse)
      
ojb = Mylist()
msg = ojb.append('moon')
print(ojb)
print(msg)
        
'''针对列表做了一些限制, 我们定义了一个子类 然后父类是列表, 也就相当于子类拥有父类的一切属性和方法,  然后我们对父类的方法做出了改变,我们要求在执行append方法前,先判断是否是moon 如果是就结束这个方法,如果不是就执行父类的添加方法'''


派生 可以在 父类的方法上做改善 

标签:总结,06,name,对象,self,父类,方法,class
From: https://www.cnblogs.com/moongodnnn/p/16863408.html

相关文章

  • 本周总结11.6
    本周总结1.面向对象前戏2.编程思想3.类与对象4.对象独有的数据5.对象独有的功能6.动静态方法7.继承8.名字的查找顺序9.经典类与新式类10.派生方法1.面向对象前......
  • 第六周总结
    面向对象目录面向对象核心思路前戏之人狗大战编程思想类与对象类与对象的创建清华大学学生选课系统对象的独有数据对象的独有方法动静态方法继承的概念继承的本质名字的查......
  • 服务框架基础知识总结
    转载:https://www.cnblogs.com/imyalost/p/10274797.html参考:《京东基础架构建设之路》 要组成一个基本的通信服务框架,最起码需要这三部分:统一的RPC框架、服务注册中心......
  • Java 线程池之ThreadPoolExecutor学习总结
    前提javaversion"1.8.0_25"池简述软件开发活动中,我们经常会听到数据库连接池、内存池、线程池等各种“池”概念,这些“池”到底是什么东西呢?程序的世界里,我们可以将池简单......
  • Java 线程池之ThreadPoolExecutor学习总结
    前提javaversion"1.8.0_25"池简述软件开发活动中,我们经常会听到数据库连接池、内存池、线程池等各种“池”概念,这些“池”到底是什么东西呢?程序的世界里,我们可以将池简单......
  • 20220604-note
    2022.6.4集训:欧拉回路postedon2022-06-1214:46:40|under学术|source2022.6.4集训:欧拉回路基本概念定义令$G=(V,E)$为一个图。对于$u\inV$,称$u$的入度......
  • 10.31-11.4 周末总结
    目录一、ATM项目二、编程思想1.面向过程2.面向对象三、对象与类四、类与对象的创建1.类的语法结构2.类的定义与调用1.定义类2.查看名称空间的方法1__dict__方法2点号运算......
  • 2022-2023-1 20221418 《计算机基础与程序设计》第十周学习总结
    2022-2023-120221418《计算机基础与程序设计》第十周学习总结作业信息这个作业属于哪个课程(2022-2023-1-计算机基础与程序设计)这个作业要求在哪里(2022-2023......
  • python学习第五周总结
    面向对象前戏之人狗大战#编写代码简单的实现人打狗狗咬人的小游戏(剧情需要)"""推导步骤1:代码定义出人和狗"""person1={'name':'jason','age':18,......
  • 20221427第十周学习总结
    2022-2023-120221427《计算机基础与程序设计》第十周学习总结作业信息班级链接(2022-2023-1-计算机基础与程序设计)作业要求(2022-2023-1计算机基础与程......