10月9日面向对象的小结
1.9月7日数据类型基础知识2.9月6号小知识点TODO3.9月7日while和for循环4.9月8日数据类型内置5.9月8号字符串类型6.9月9日字符串内置方法需要掌握的程度7.9月10号列表数据类型内置方法8.9月11日元组数据类型内置方法9.9月11日字典数据类型内置方法10.9月12日集合数据内置方法11.9月12日数据类型分类12.9月12日深浅拷贝13.9月12日深浅拷贝14.9月13日基本的文件处理15.注册和登录加退出16.9月14日猜年龄基础版17.9月14日小结18.9月15日字符编码19.9月15日Python2和Python320.9月15日文件的三种打开模式21.9月15日with管理文件上下文22.9月17日文件的高级应用23.9月17日文件修改的两种方式24.9月17日函数的定义25.9月18日函数的三种定义方式26.9月18日函数的参数27.9月18日可变长参数28.9月18日函数的嵌套29.9月18日名称空间和作用域30.9月19日闭包函数31.9月19日装饰器合集32.9月19日迭代器33.9月20日计算器34.9月20日三元表达式、列表推导式、字典生成式、zip()压缩方法35.9月20日生成器36.9月20日生成器表达式37.9月21日匿名函数38.9月21日猜数字函数版39.9月21日学生管理系统基础版40.9月24日贪吃蛇41.9月24日函数递归42.9月24日炫酷五子棋43.9月25日内置方法44.9月25日模块的四种形式45.9月25日import和from…import…46.9月26日模块的搜索路径47.9月26日python文件的两种用途48.9月26日类与对象之类的属性和函数49.9月26日类与对象之类的属性和方法(函数)大集合50.9月27日人狗大战51.9月27日继承介绍和菱形属性查找52.9月28日例会知识点53.9月28日函数思维图54.10月6日继承重用父类方法55.10月7日绑定方法的特殊之处56.10月7日super的查找顺序57.10月7日类和对象基础小结58.10月7日组合59.10月7日继承和组合的区别以及应用方面60.10月8日多态和多态性61.10月8日封装62.10月8日property的用法63.10月9日类的绑定方法64.10月9日非绑定方法
65.10月9日面向对象的小结
66.10月12日选课系统67.10月13日isinstance和issubclass68.10月15日反射69.10月16日面向对象内置方法70.10月16日元类的基础以及定义方式71.10月14日例会总结72.10月17日元类回顾73.10月17日__new__方法学习以及__call__和__init__的关系74.10月18日单例模式75.10月18日元类、单例模式76.10月19日网络编码基础概念77.10月19日简单的cs架构软件编写78.10月19日略微升级的服务器和客户端79.10月20日subprocess模块80.10月23日粘包、struct模块以及json模块81.10月23日简易服务器与客户端通信82.基于udp协议的服务器和客户端以及特殊点83.10月24日用socketserver模块TCP和UDP的服务器84.网络编程小结85.10月25日socketserver源码分析86.10月25日拓展和进程87.10月26日开启进程以及扩展点88.10月26日Process的join用法目录
面向对象的小结
为什么要有面向对象:
最本质的提供可扩展性
类与对象:
程序中必须先有类,再有对象
类中有属性,有方法
class Person:
#类属性
school='object'
#对象的绑定方法
def __init__(self):
pass
当我有对象后的代码
class Person:
#类属性
school='object'
#对象的绑定方法,初始化方法完成对象的初始化
#特殊之处,类实例化对象的时候自动调用
def __init__(self,name,age):
self.name=name
self.age=age
#实例化对象
p=Person('junwan',16)
对于修改的注意事项:
对象不能修改类属性
类属性只能类来改
一切皆对象
首先对象是有自己的属性和方法,在python中几乎所有东西都可以被视为对象,因为它们都有自己的属性和方法。
一切皆对象还有一个可以体现的地方,假设我现在写了一个模块然后我调用
我需要创建一个新的py文件先命名为A,然后用import来使用
如图
绑定方法
定义在类内部,没有装饰器装饰的方法都是对象的绑定方法
需要对象来调用,对象调用的时候,会把自身传入
对象交互
对象之间的交互是指不同对象之间通过方法调用、属性访问等方式进行信息传递和协作,以实现特定的功能或完成任务
继承
继承的主要作用:减少代码冗余
# 这里A继承了object类这个概念所以它是新式类
class A(object):
print('你继承了我的东西')
# B继承了A这个类
class B(A):
pass # 这里的pass没有什么用
继承的查找顺序(新式类,经典类)
广度优先和深度优先
在子类中调用父类的方法
指名道姓
# 子类中调用父类的方法
class fulei: # 生成一个父类
def __init__(self, name, tizhong):
self.name = name
self.tizhong = tizhong
class Anmin: # 生成一个动物类
def __init__(self, name, tizhong):
fulei.__init__(self, name, tizhong)
dog = Anmin('修勾', 1) # 实例化生成一个动物对象
print(dog.name) # 输出该对象的其中一个属性
super(类名,对象).父类的方法名() super严格按照mro列表查找
#super方法
class fulei:
def __init__(self, name, age):
self.name=name
self.age=age
class student(fulei):
school='wanxi'
def __init__(self,name,age,course):
super().__init__(name,age,)
self.course=course
stu=student('nick',19,'english')
print(stu.name)
派生
派生也叫派生类(也称为子类或者衍生类)在面向对象编程中具有重要的意义,它们主要用于以下
1.代码重用
2.继承和多态
3.抽象和封装
4.扩展性和灵活性
5.分层结构
多态和多态性
多态性是多态的一种体现
多态是概念
多态性
class anmial: # 定义一个动物类
pass
class Cat(anmial): # 属于动物类的另一种形态:猫
def speak(self):
print('miao')
class Dog(anmial):# 属于动物类的另一种形态:狗
def speak(self):
print('wang')
def diaoyong(anmial): # 这里可以利用函数来调用动物内的方法
anmial.speak()
dog1 = Dog()#实例化一只狗
diaoyong(dog1)#利用函数选择需要的实例对象来调用它的方法
cat = Cat()#实例化一只猫
diaoyong(cat)#利用函数选择需要的实例对象来调用它的方法
鸭子类型:不用父类强制约束,人为约束
鸭子类型是一种动态类型的概念,通常用于编程语言中。它的核心思想是“如果它看起来像鸭子,走起路来像鸭子,那么它就是鸭子”。
封装
组合也是封装的一种,同时封装具有隐藏属性和方法的特点
用 _ _ 放在属性或者方法前面:能把属性和方法隐藏
隐藏属性是为了安全
隐藏方法为了隔离复杂度
propetory方法
把方法包装成数据属性
修改和删除如下
@方法名.setter
@方法名.deleter
classmethod方法
类的绑定方法
将类里面的方法变成类的绑定方法
staticmethod方法
静态方法(非绑定方法)
将类里面的方法变成静态方法,就相当于变成了普通函数,类和对象都可以直接调用