面向对象之基础回顾

面向对象编程思想

面向过程编程:
	过程就是流程,即按照一定的流程将我们所想需要的功能一一实现程序员需要把控每一个流程
面向对象:
	更偏向于创造一个功能出来,他之后用作什么用途以及后续是发展是怎么样的跟程序员无关,比如游戏人物等

面向对象类与对象

对象:
	数据与功能的结合体
类:
	多个对象相同数据与功能的结合体

面向对象代码实操

class Student:
    shcool_name = '清华大学'

    def choice_coures(self):
        print('学生选课功能')
1.关键字:class
2.类名:首字母大写
3.数据:变量名与数据的绑定,功能其实就函数

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

obj = Student()
1.类加括号可以生成一个对象,这句话表示生成一个对象并且赋值给变量名obj
print(obj.shcool_name)
1.对象可以用点的方式,点出来对象内部名称空间的名字或者产生对象的类的名称空间中的名字
2.关键字__dict__
print(obj.__dict__)
这句话表示,让对象obj内部空间的名字以字典的方式展示出来
3.对象内部空间如果增加数据
obj.name = 'jason'
obj.age = 18
print(obj.__dict__)  # {'name': 'jason', 'age': 18}
对象用点的方式点不存在的名字,就会在对象的内部名称空间中生成一个数据值,我们可以用__dict__查看对象内部空间生成的数据值

对象的独有数据

class Student:
    shcool_name = '清华大学'
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def choice_coures(self):
        print('学生选课功能')
在类中,直接给生成的对象添加独立的数据
这样的生成对象的时候,对象会直接传进__init__第一个参数,后面的直接在类的括号内填写参数就可以生成一个拥有独立数据的对象
class Student:
    shcool_name = '清华大学'
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def choice_coures(self):
        print('学生选课功能')

obj = Student('jason',18)  # 这里不传参是会报错的
print(obj.__dict__)  # {'name': 'jason', 'age': 18}

对象的独有方法

函数放在类中,谁调用函数,谁就是函数的主人,这就是绑定关系
类在调用自己内部的函数的时候,需要传参进去
类生成的对象在调用类内部的函数时,会将自己作为第一个参数传入,后面有几个参数再传几个参数
class Student:
    shcool_name = '清华大学'
    def __init__(self,name,age):
        self.name = name
        self.age = age

    def choice_coures(self):
        print('学生选课功能')

Student.choice_coures('jason')  # 学生选课功能
obj = Student('jason',18)
obj.choice_coures()  # 学生选课功能

面向对象之动静态方法

动态方法:
1.绑定给对象的方法:
	在类中绑定给对象的方法就是动态方法,对象在调用这个方法的时候会把对象自己作为第一个参数传入,后面有几个参数传几个,类在调用绑定给对象的方法的时候有几个参数需要传几个参数
2.绑定给类的方法:
	关键字  @classmethod
   绑定给类的方法,类的调用的时候会直接将类作为第一个参数传入
	对象在调用的时候,会将产生对象的类作为第一个参数传入
静态方法
1.关键字  @staticmethod
在类的内部具有这个关键字的方法,和类与对象都没有绑定关系,类和对象在调用此方法的时候都需要有几个参数传几个参数

面向对象之继承理论

面向对象的三大特性:
	封装、继承、多态
继承的含义:
	继承在现实中表示儿子继承了父亲的
   在编程世界中表示类A继承了类B,具有了类B的数据和方法,而且类A所产生的对象同样也具有类B的数据和方法

继承基本操作

继承实操
class F1:
    pass
class F2(F1):
    pass
此时就是类F2继承了类F1,继承只需要在类的定义阶段在类名后面加括号写上想要继承的类名即可
父类:F1
子类:F2

对象查找名字的顺序

谨记:对象在查找名字的时候一定要查找自己内部空间
1.不继承情况下的查找顺序
	对象内部空间<<<产生对象的类
2.单继承情况下
	对象内部空间<<<产生对象的类<<<产生对象的类的父类
3.多继承情况下名字的查找顺序
菱形继承:广度优先,最后才会找到闭环的点
对象自身<<<产生对象的类<<<父类(括号内从左到右,最终到闭环的点)
非菱形继承:深度优先
对象自身<<<产生对象的类<<<父类(括号内从左到右)

继承本质

对象:数据与功能的结合体
类:多个对象相同的数据与功能的结合体
父类:多个类相同数据与功能的结合体
继承的本质应该分为两部分:
	抽象:将多个类相同的数据与功能抽出来形成一个新的类
   继承:将多个类继承刚刚生成新的类

基于继承的派生方法

子类基于父类的某个方法多了拓展
	关键字:super()
 class My_list(list):
    def append(self, vlaue):
        if vlaue == 'jason':
            return '不能添加'
        super().append(vlaue)
        return self


obj = My_list()

print(obj.append('jason'))  # 不能添加
print(obj.append('18'))  # ['18']
posted @ 2022-11-06 17:37  雪语  阅读(16)  评论(0编辑  收藏  举报