day34-3 类和对象小知识
阅读原文时间:2023年07月10日阅读:1

目录

  • 属性查找顺序

  • 类与对象的绑定方法

  • 类与数据类型

  • 对象的高度整合

  • 属性查找顺序:先从对象自身查找,对象没有就去类中查找,类中没有则报错

    class Student:
    name = 'xxx'

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

    stu1 = Student('张三')
    print(stu1.name)

    张三

    class Student:
    school = 'a中'

    def __init__(self, num, name, age):
        self.num = num
        self.name = name
        self.age = age
    
    def eat(self):
        print(self.school)
        print(self.name)
        self.num += 1
        print(f'{self.num} is eat')
        print(id(self))

    stu1 = Student(1, '张三', 19)

    Student.eat(111) # 在这里self=111,所以会报错,以为111没有school用法

    stu1.eat()
    print(id(stu1))

    a中
    张三
    2 is eat
    2874406763320 # 说明self和stu1是同一个东西
    2874406763320

  • 针对类而言:eat里的self就是正常传入的参数

  • 针对对象而言:eat里的self就是对象本身

  • Python中一切皆对象

    lis = [1, 2, 3] # 和下面代码等价,就是一个实例化对象的过程,只是简写了
    lis1 = list([1, 2, 3])
    print(type(lis)) # 类型就是一个名为list的类

    lis.append(5) # 和下面代码等价,就是一个查找类中方法的过程
    list.append(lis1, 5)

    print(lis)
    print(lis1)


    [1, 2, 3, 5]
    [1, 2, 3, 5]

  • 在类中封装了一大堆属性,然后又封装了一大堆方法(专门用来控制这些属性),并且在这基础之上,对于不同的对象,这些属性和方法又不相同。

  • 个人理解有点类似于闭包

    class Student:
    def init(self, num, name, age):
    self.num = num
    self.name = name
    self.age = age

    def eat(self):
        print(self.name, '开始吃饭了')
    
    def sleep(self):
        print(self.name, '开始睡觉了')

    zhangsan = Student(1, '张三', 19)
    lisi = Student(2, '李四', 20)

    zhangsan.eat()
    lisi.eat()

  • 闭包函数

    import requests
    def outter(url)
    def sqider():
    response = requests.get(url)
    response.encoding = 'gb2312'
    data = response.text
    return data
    return sqider

    xiaohuar = outter('http://www.xiaohuar.com')
    print(xiaohuar)
    print(xiaohuar)

  • 只是闭包外面套了个函数,而对象外面套了个类