首页 > 其他分享 >10.31-11.4 周末总结

10.31-11.4 周末总结

时间:2022-11-06 18:14:02浏览次数:60  
标签:__ 10.31 deft 11.4 self Sfinal 周末 对象 print

目录

一、ATM项目

文件夹 文件作用 文件内容
bin文件夹 binary二进制,可执行的二进制文件 可执行的文件
conf文件夹 Config(配置)存放相关配置文件 用户、商品文件路径,日志文件配置
core文件夹 source(源码)用来存放源代码以区别开其它文件 存放需求,登录、注册、转账…
db文件夹 database(数据库)组织、存储和管理数据的仓库 数据层,查看数据修改数据
inteface文件夹 interface(接口)接口文件夹,存放接口文件 银行业务接口,用户业务接口,购物业务接口
lib文件夹 library(库,图书馆)存放共用方法或者库 装饰器,获取用户名,获取日志对象
log文件夹 log(日志)用来记录日志用户操作的文档 记录用户操作信息
ATM

三层架构逻辑

第一层:只做数据展示和简单的数据获取
第二层:真正的核心业务逻辑和处理(代码)
第三层:数据操作

二、编程思想

1.面向过程

​ 面向过程编程,就是提出问题后,按照流程一步步的来解决问题。核心是过程二字,就像流水生产产品,从原材料的准备到最后的成品,是按部就班的。

优点:可以将复杂的问题一步步分割,简化
缺点:扩展性差

2.面向对象

​ 面向对象编程,重点是数据和功能的绑定。核心是对象,就像女娲造人一样,究竟对象将来的结果如何,并不是程序员关心的。我们的重点放在数据和功能的绑定。

优点:程序的耦合性高,扩展性强
缺点:编程更加复杂,难度高

​ 无论是面向对象编程还是面向过程编程,没有孰优孰劣,只有针对项目中不同的功能,使用合适的方法,做到两者相互结合,相互交融,让项目更加优化才是最终的答案。

三、对象与类

​ 面相对象的核心是对象,而对象是数据和公共的结合体

的创建使用了一条新的语句,class语句。类就是一些函数的宝,这些函数大量地使用并出泪内置对象类型,类的设计是为了创建和管理新的对象。类的属性提供了行为(数据以及函数),所有从类产生的实例都继承该类的属性。

继承是一种代码定制和复用的机制。

四、类与对象的创建

在程序中,如果要产生对象,则需要先定义类

1.类的语法结构

1)class是定义类的关键字

2)类名需要首字母大写

3)数据是变量名与数据值的绑定,类中内部的函数就是方法

class C1(C2,C3): 
    def setname(self, who):
        self.name = who

        
I1 = C1()
I2 = C1()
I1.setname('duoduo')
I2.setname('jojo')
print(I1.name)

image-20221104195207964

当def 语法出现在类的内部时,通常称为方法,而且会自动接收第一个特殊参数(self)

2.类的定义与调用

​ 类在定义阶段就会执行类体代码,但是属于类的局部名称空间,外界无法调用。

1.定义类

# 定义类
class Sfinal:
    print('恭喜deft圆梦')
    # 对象公共的数据
    one = 'deft'

    # 对象功能的方法(功能)
    def champion(self):
        print('deft')

通过类产生的对象都可以使用该类中的方法和数据

2.查看名称空间的方法

1 __dict__方法

1. __dict__方法

1)类名.__dict__ 查看类的名称空间中的名字,包括隐藏的名字

print(Sfinal.__dict__)  # 查询的方法本质是__dict__方法
---------------结果-------------------
恭喜deft圆梦
{'__module__': '__main__', 'one': 'deft', 'champion': <function Sfinal.champion at 0x104503820>, '__dict__': <attribute '__dict__' of 'Sfinal' objects>, '__weakref__': <attribute '__weakref__' of 'Sfinal' objects>, '__doc__': None}


2)类名.__dict__.get(方法名/数据名) 
查看类的名称空间中的方法或者数据,查看数据则直接得到数据,查看方法则得到方法的内存地址名

print(Sfinal.__dict__.get('one'))
print(Sfinal.__dict__.get('champion'))
-----------------结果-------------------
恭喜deft圆梦
deft

<function Sfinal.champion at 0x100963820>

2 点号运算法

在python中简化了__dict__方法,可以用点的方式去获取类中的名字

# "在面向对象中,类和对象访问数据或者功能,可以统一采用句点符"
print(Sfinal.one)
print(Sfinal.champion)
-----------------结果-------------------
恭喜deft圆梦
deft

<function Sfinal.champion at 0x10334f820>

3.类的调用

(1)类名加括号就会产生类的对象,并且每执行一次都会产生一个全新的对象

(2)使用__dict__查看名称空间中的内容是,返回 {} 表示这三个对象都只有类中相同(公共)的功能和数据,不具备独特的数据和功能

(3)__dict__可以简化为点号运算符,来调用对象中的方法

obj1 = Sfinal()       
print(obj1)           
print(obj1.__dict__)  
print(obj1.one)       
print(obj1.champion)  
--------------------
<__main__.Sfinal object at 0x1025ebf10>
{}
deft
<bound method Sfinal.champion of <__main__.Sfinal object at 0x1025ebf10>>

{} 表示这三个对象都只有类中相同(公共)的功能和数据,不具备独特的数据和功能

数据和功能 也可以统称为属性,数据:属性名 功能:方法

五、添加对象独有的数据

​ 定义名为__init__的函数,其可以专门给该类产生的对象添加独有数据的功能(类产生对象的过程中自动触发)

# 定义类                     
class Sfinal:             
    def __init__(self, one, only, team): 
        # 对象公共的数据         
        self.one = one    
        self.only = only  
        self.team = team  
                          
    # 对象功能的方法(功能)         
    def champion(self):   
        print('deft')     
        
obj1 = Sfinal('deft', 'deft', 'drx')
print(obj1.one)  # deft       

当对象公共的数据使用了双下init方法,则可以为其添加对象独有的数据

六、对象独有的功能

类的特点是:

定义在类中的功能,默认就是绑定给对象使用的,谁来调谁就是主人公,也就是说对象调用会自动将对象本身当做第一个参数传入。

# 定义类
class Sfinal:
    def __init__(self, one, only, team):
        # 对象公共的数据
        self.one = one
        self.only = only
        self.team = team

    # 对象功能的方法(功能)
    def champion(self):
        print(f'恭喜{self.one}追梦终成功,带领{self.team}夺冠')

obj1 = Sfinal('deft', 'deft', 'drx')
print(obj1.champion())
obj2 = Sfinal('faker', 'faker', 'T1')
print(obj2.champion())
-------------------------------
恭喜deft追梦终成功,带领drx夺冠
None
恭喜faker追梦终成功,带领T1夺冠
None

则可以看出,self的特性使得对象的功能从某种角度来说,即公共又独有,公共于形式,独有于内容。

2.对象修改和新增键值对

  • 对象修改数据值
obj1.name= 'Meiko'  # 当点的名字已经存在的情况下 则修改对应的值
  • 对象新增数据值
obj1.only = 'faker'  # 当点的名字不存在的情况下 则新增数据
print(obj1.__dict__)

七、定义动静态方法

1.动态函数 被@classmethod修饰的函数

被@classmethod修饰的函数,按照语法特性会自动将类的名字传入使用;而该类所产生的对象也可以调用,并会自动将产生该对象的类的名字传进去使用。

2.静态函数 被@staticmethod修饰的函数

被@staticmethod修饰的函数为普通函数,没有特别语法。无论是类还是对象调用该函数,都必须自己手动传参。

# 定义类
class Sfinal:
    s12 = 'drx'

    # @classmethod修饰的动态函数
    @classmethod
    def func1(cls, one, team):  # cls会自动将类名传进去
        print(f'恭喜{one}追梦终成功,带领{team}夺得{cls}冠军')
 
    # @staticmethod修饰的静态函数
    @staticmethod
    def func2(one, team):
        print(f'恭喜{one}追梦终成功,带领{team}夺冠')

obj1 = Sfinal()
obj1.func1('deft', 'drx')
obj2 = Sfinal()
obj2.func2('deft', 'drx')
---------------------------
恭喜deft追梦终成功,带领drx夺得<class '__main__.Sfinal'>冠军
恭喜deft追梦终成功,带领drx夺冠

八、面向对象-继承

1.继承的语法

class Son(Father):
    pass
# Son就继承了Father中所有的数据和方法

2.名字查找的顺序

1 不继承的情况下

不继承的情况下,对象查找名字的顺序
1)先从自己的名称空间中查找
2)自己没有再去产生该对象的类中查找
3)如果类中也没有,那么直接报错
对象自身名称空间 >>>>.类名称空间

2 继承的情况下

继承的情况下,对象查找名字的顺序

对象点名字,永远要先从对象自身开始一步步查找

image-20221106151239730

在类树中,高度不同时,会从最低位置,优先获得名字;高度相同时,会从左到右(也就是填写父类的顺序),来查询名字。

九、派生方法super

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

调用super()会得到一个特殊的对象,该对象专门用来引用父类的属性,也就是在父类的方法的基础上扩展了属于子类的独特的属性

super()方法 的语法结构

# 完整语法
super(自己的类名, self).想要调用的父类的方法(形参)
# 在形参中无需填写self参数,会自动传入对象的名字

标签:__,10.31,deft,11.4,self,Sfinal,周末,对象,print
From: https://www.cnblogs.com/DuoDuosg/p/16863228.html

相关文章

  • 【10.29-11.4】博客精彩回顾
    一、优秀文章推荐1.​​vue中引入高德地图Loca数据可视化​​2.​​SpringBoot自定义注解+异步+观察者模式实现业务日志保存​​​3.​​【原子样式实践】一次搞定微信开发......
  • java获取当月日期和当月周末
    根据年月,获取当月所有日期publicstaticvoidmain(String[]args){System.err.println(getMonthDate("2022-07"));}publicstaticListgetMont......
  • 10.31
    #include<stdio.h>#include<math.h>intmain(){ unsignedlonglonga,n; scanf("%llu",&a); n=a; intsz,i,j,x; for(i=0;;i++) {a/=10;sz++; if(a==0){break; ......
  • 10.31 学校膜你赛复盘
    T1 NumberofMultisets 一个几乎推柿子的题,题解此处不要啥都往DP上想啊.....先尝试用暴力过,能成最好,以推暴力为主注意一个点,这里DFS的一个特判 如果先判记忆化,会WA......
  • 10.31 解题报告
    T1考场用时:\(30\)min期望得分:\(100\)pts实际得分:\(100\)pts考虑最小的单元是\(4=2\times2\),所以对于所有的数按照\(\mod4\)的余数来分四类。对于比较小的数,打......
  • 10.31集训解题报告(自家隔离时期)
    A题面:对于给定的一个正整数\(n\),判断\(n\)是否能分成若干个正整数之和(可以重复),其中每个正整数都能表示成两个质数乘积。思路:随随便便找规律就找出来了。代码:intq......
  • [2022.10.31]集合与数组
    数组与集合1.集合与数组存储数据概述:集合、数组都是对多个数据进行存储操作的结构,简称Java容器。说明:此时的存储,主要指的是内存层面的存储,不涉及到持久化的存储(.txt,.jpg,......
  • 2022.10.31python学习第二天
    python集合(数组)1.列表:是一种有序和可更改的集合,允许重复的成员   列表用 []来编号  可通过索引号来访问列表项  ......
  • 10.24-10.28周末回顾
    目录一、购物车二、hashlib模块1.加密的含义,如何理解加密2.加密算法的基本使用3.加密补充说明4.加密操作的用处5.优秀hash算法的特性三、子进程模块subprocess模块四、logg......
  • 10.17-10.21周末回顾
    目录一、异常处理语法结构二、生成器对象三、模块2.导入模块的两种语句1import句式四、软件开发目录五、python常用内置模块1.collections模块1具名元组namedtuple2双......