周总结(6)

周总结(6)

面向对象

编程思想

1.面向过程编程
'按流程操作,一步一步得到答案'
2.面向对象编程
'对象就是容器,用来将数据与功能整合到一起'类似与模块内部含有数据与功能。
"""
 面向过程与面向对象两者没有优劣之分,具体要结合实际情况,甚至很多时候两者都是混合一起的,思想占据的比例不用而已。
"""

类与对象

对象: 数据与功能的结合体
类: 含有多个对象相同的数据与功能的结合体
'python中必须先定义类才能产生对象'

"""数据和功能的别称: 属性名与方法"""

类与对象的创建

1.类的语法结构:
    class 类名:
        类体代码
定义类必须 有关键字 class
类体代码就是 数据(变量名与变量值的关系)与功能(函数)
类名规范:  首字母大写

2.定义类
class Student:
    school_name == '1'
	 def choice_coures(self):
        print('2')
# 查看名称空间方法
print(类名.__dict__)
'可以查看该名称空间内的所有名字'
# 句点符访问类里的数据与功能
print(类名.school_name)
print(类名.choice_coures)

# 产生对象的方法
obj1 = 类名()
# 可以用对象名句点符获取类里的数据
print(obj1.school_name)
# 可以通过类名.数据变量名的方式更改数据值
Student.school_name = '3'

给对象添加独有的数据

class Student:
    school_name == '1'
	 def choice_coures(self):
        print('2')
# 产生对象
obj = Student()
# 查看对象内的数据
print(obj.__dict__)
# 给对象添加独有数据
obj.__dict__['name'] = 'tank'

# 给数据封装成函数放进类里
class Student:
    school_name = '1'

    def __init__(self, name, age, hobby):
        self.name = name  # 等同于 self.__dict__['name'] = name
        self.age = age
        self.hobby = hobby

    def choice_coures(self):
        print('2')
# 给不同的对象添加独有数据
obj1 = Student('tank',20,'read')
obj2 = Student('owen',18,'money')
'自动将对象名当做第一个参数传入'
# 通过对象名.的方式 查找数据
print(obj1.name)
"""
 类中的__init__方法会在产生对象的时候自动执行类产生对象的具体步骤
  1、先创建一个没有独有数据的空对象
  2、将空对象和类括号内传入的数据一并交给__init__执行
  __init__的第一个参数就是对象本身
  __init__(obj, name, age, gender)
  3、将创建好的对象自动返回
  第一个形参self其实就是一个变量名,用来接收对象,所以给它起了一个固定的名字self
"""

给对象添加独有功能及绑定方法

class Student:
    school_name = '1'

    def __init__(self, name, age, hobby):
        self.name = name 
        self.age = age
        self.hobby = hobby

    # 即是对象的公共功能,也是对象的独有功能,谁来调谁就是主人公
    def choice_coures(self):
        print('2')
# 调用功能
stu1 = Student()
# 用类名调
student.choice_coures(1)
'必须传值'



1.绑定给对象的方法 self
# 对象去调
stu1.choice_coures()
'对象被当成第一个参数传入,类名调则要传参数'

2.绑定给类的方法
  @classmethod
  def func1(cls):
    print('2')
# 类名调
Student.func1()
# 对象调
obj.func1()
'必须使用装饰器 '@classmethod'这样用类名去调也不用传参'


3. 静态绑定 类似于函数,谁调都要传参
 @staticmethod
 def func2(a):
    print('有几个形参就要传几个参数')
# 谁来调都要传参
student.func2(1)
obj.func3(1)
'必须使用装饰器 '@classmethod

面向对象之继承

面向对象的三大特征

1.封装

2.继承

3.多态

继承是最重要最为核心的实操最多的

继承的含义

​ 子类继承父类的资源(数据与功能)

继承的目的

​ 子类获取父类的数据与功能的使用权

继承的基本使用

# 继承的基本使用
class A:
    pass
class B(A):   # 继承父类 A
    pass
'也可以继承多个父类 '
# 我们将被继承的类型称之为:父类或者基类
# 继承者的类,称之为子类或者派生类

继承的本质

抽象: 将多个类相同的数据或功能抽出去形成一个新的类  
继承: 将多个类 抽取的相同的东西 继承成新的类
"""
  在面向对象编程中,其实类和父类主要功能都是用来减少代码冗余的
  对象:数据与功能的结合体
  类:多个对象相同数据和功能的结合体
  父类:多个类相同数据和功能的结合体
"""

名称的查找顺序

不继承的情况下  # 对象内 ---- 产生对象的类
单继承的情况下  # 对象内 ---- 产生对象的类 ---- 父类
多继承的情况下  # 对象内 ---- 产生对象的类 ---- 继承的多个父类从左往右的顺序依次查找
非菱形继承   # 遵循深度优先, 走完一个分支再走下一个分支
菱形继承    # 遵循广度优先, 走完所有分支再走最后的

经典类与新式类

是否继承 object
经典类: 不继承 所有类
新式类: 直接或者间接继承了object或者其子类的类 

python2 中 有经典类与新式类
python3 中只有新式类"所有类默认都继承 object"
"为了我们编写的代码兼容性更强我们以后无论在哪个版本中 最好也都写上object"
class A1(object):
    pass

派生方法

打个比方,比如我们人类 中的学校里有
可以分成:
学生, 老师,   学生和老师都是人。
学生属性有: 姓名,年龄,爱好,学号
老师属性也有: 姓名,年龄,爱好,等级
	"""姓名,年龄,爱好这些都是作为人的共有属性。学号和等级都是学生和老师拥有的特有属性那么我们代码就可以不用反复的写这些共有属性,把他们全部放到人类的属性中去,后期可以用老师和学生来继承这些属性。"""
代码实现:
class Person:
    def __init__(self, name, age, hobby):
        self.name = name
        self.age = age
        self.hobby = hobby
      '人类的共有属性'

class Teacher(Person):  # 继承 Person 的init
    def __init__(self, name, age, hobby, level):
        super().__init__(name, age, hobby)  # 使用super 使用 Person的属性
        self.level = level  # 老师独有的属性


class Student(Person):
    def __init__(self, name, age, hobby, sid):
        super().__init__(name, age, hobby)
"必须使用关键字 super "
添加的独有属性的方法:
# 学生
stu1 = Student('tank','14','read',123333322)
# 教师
stu2 = Teacher('jason','28','rap','高级教师')
使用 对象名.变量名的 方法调出数据值

posted @ 2022-11-06 17:50  李阿鸡  阅读(17)  评论(0编辑  收藏  举报
Title