Tiny_Lu
不忘初心

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'>
posted @ 2019-10-09 16:09  二二二二白、  阅读(132)  评论(0编辑  收藏  举报