• Day 19 类与对象/查找顺序/对象的绑定方法


    面向对象编程

    面向过程编程

    面向过程编程的核心是‘’过程‘’二字,过程是指解决问题的步骤,即先干什么再干什么,然后干什么

    基于面向过程编程的思想编写程序就好比一条流水线,是一种机械式的思维方式

    • 优点:复杂的问题流程化,进而简单化
    • 缺点:可扩展性差

    面向对象编程

    面向对象编程的核心是‘’对象‘’,对象是特征与技能的结合体

    基于面向对象编程的思想编写程序就好比创造了一个世界

    • 优点:可扩展性强
    • 缺点:编程的复杂程度要高于面向过程

    类和对象

    什么是对象

    对象是特征和技能的结合体

    什么是类

    类的意思就是:种类,分类,类别

    类就是一系列对象相似的特征与技能的结合体

    在python程序中,必须先定义类,然后再调用类产生对象

    现实世界中定义类和对象

    就拿现实世界中的猫来讲,我们可以将一只猫视为一个对象

    定义对象

    猫1:

    ​ 特征:

    ​ 品种:英短

    ​ 年龄:5岁

    ​ 体重:5kg

    ​ 爱好:吃肉

    ​ 技能:

    ​ 吃

    ​ 睡

    猫2:

    ​ 特征:

    ​ 品种:加菲猫

    ​ 年龄:6岁

    ​ 体重:6kg

    ​ 爱好:吃肉

    ​ 技能:

    ​ 吃

    ​ 睡

    定义类

    所以我们可以把总结为猫类

    动物类:

    ​ 相似的特征:

    ​ 爱好:吃肉

    ​ 相似的技能:

    ​ 吃

    ​ 睡

    程序中定义类和对象

    定义类

    class Cat():
        hobby = 'meat'
        
        def eat():
            print('eat meat')
            
        def sleep():
            print('sleeping')
    

    定义类的时候,会生成类的名称空间,并执行类内部的代码,将类里面的名字放到名称空间里

    定义对象

    调用类即可产生对象,调用类的过程,又被称为类的实例化,实例化的结果称为类的对象

    cat1 = cat()
    print(cat1.hobby)
    

    meat

    cat2 = cat()
    cat2.eat()
    

    eat meat

    定制对象独有特征

    class Student():
        school = 'oldbly'
        
        def choose_course(self):
            print('choosing_course')
            
    stu1 = student()
    stu2 = student()
    
    • 对于上述的学生类,类中的属性发生改变,那么他所实例化的对象的属性也会发生变化
    student.school = 'oldgirl'
    
    print(stu1.school)
    print(stu2.school)
    

    oldgirl
    oldgirl

    我们说类是相似的对象特征和技能的结合体,那么每一个对象还具有一些独有特征

    对象本质类似于类,也是一个名称空间,但是对象的名称空间用来存放对象独有的名字

    两种方法定制对象独有特征:

    方式一:

    stu1.name = 'Tiny'
    stu2.name = 'Nick'
    

    方式二:

    # 使用类的__init__方法,实例化对象的时候自动触发定制属性
    class Student():
        school = 'oldbly'
        
        def __init__(self, name):
            self.name = name
        
        def choose_course(self):
            print('choosing_course')
            
    stu1 = Student()
    stu2 = Student()
    

    对象的绑定方法

    类内部的函数主要是给对象用的:

    1. 由类来调用类内部的函数,该函数只是一个普通的函数,普通函数需要接收几个参数就得传入几个参数。
    2. 由对象来调用称之为对象的绑定方法,不同的对象调用该绑定方法,则会将不同的对象传入该绑定方法中

    对象的绑定方法,是由对象来调用的,特殊之处就是把对象当做第一个参数传入该方法中

    class Student():
        school = 'oldbly'
        
        def __init__(self, name):
            self.name = name
        
        def choose_course(self):
            print('choosing_course')
            
    stu1 = Student()
    
    print(Student.choose_course)
    print(stu1.choose_course)
    
    <function Student.choose_course at 0x006F0FA8>
    <bound method Student.choose_course of <__main__.Student object at 0x006F71B0>>
    

    对象与类的查找顺序

    1. 对象.属性,若对象本身有,则优先查找对象自己的
    2. 若对象本身没有,则去类里找,若类也没有,则报错
    class Student():
        SCHOOL = 'oldboy'
        NAME = 'DDDDDDDD'
    
        def __init__(self, name, age, sex, school):
            self.name = name
            self.age = age
            self.sex = sex
            self.SCHOOL = school
    
    
    stu1 = OldboyStudent('小正正', 17, 'male', 'oldgirl')
    print(stu1.SCHOOL)
    print(stu1.NAME)
    
    oldgirl
    DDDDDDDD
    
    print(stu1.AGE)  # 报错
    

    python中一切皆对象

    int, float, str, list, tuple, dict, set, bool也是对象

    python中一切都是对象

    list1 = [1, 2, 3]  # list([1, 2, 3])
    print(list1)  # [1, 2, 3]
    print(id(list1))  # 2738050243464
    print(type(list1))  # <class 'list'>
    
  • 相关阅读:
    多线程编程:阻塞、并发队列的使用总结
    为什么阿里的程序员那么帅?---原来他们都有"编码规约扫描"神器在手
    多线程编程:多线程并发制单的开发记录【一】
    如何使用线程锁来提高多线程并发效率
    如何在分布式环境中同步solr索引库和缓存信息
    前端性能优化指南
    DOM操作方法、属性
    CSS样式手册
    XSS跨站脚本攻击
    数组和对象的使用方法
  • 原文地址:https://www.cnblogs.com/2222bai/p/11642436.html
Copyright © 2020-2023  润新知