面向对象

面向过程简介

  1、概念

     面向过程核心就是过程二字,就是解决问题的流程。

  2、优缺点以及应用场景

    优点:复杂问题流程化进而简单化

    缺点:牵一发而动全身,扩展性差,可维护性差

    应用场景:对扩展性要求不高的地方。

  3、例子:注册功能的例子

# 1. 用户输入用户名和密码
def interactive():
    username = input('请输入用户名:').strip()
    password = input('请输入密码:').strip()
    email = input('请输入邮箱').strip()
    return {
        'username': username,
        'password': password,
        'email':email
    }


# 2. 验证参数
def check_info(userinfo):
    is_valid = False
    if len(userinfo['username']) == 0:
        print('用户名必须输入')
        is_valid = True
    if len(userinfo['password']) == 0:
        print('密码必须输入')
        is_valid = True
    if len(userinfo['email']) == 0:
        print('邮箱必须输入')
        is_valid = True

    return {
        'is_valid': is_valid,
        'userinfo': userinfo
    }


# 3. 写入文件,注册成功
def register(param):
    if not param['is_valid']:
        with open('userinfo.txt', 'w', encoding='utf-8') as f:
            import json
            json.dump(param['userinfo'], f)


def main():
    # 1. 让用户输入用户名
    userinfo = interactive()

    # 2. 校验参数
    check_param = check_info(userinfo)

    # 3. 注册
    register(check_param)


if __name__ == '__main__':
    main()

面向对象

  1、概念

    面向对象的核心就是对象二字

  2、什么是对象

    1、程序中

      盛放数据和函数的容器(函数是盛放数据的容器)

    2、现实生活中

      一切皆对象(对象就是特征和功能的结合体)

  3、优缺点以及应用场景

    优点:扩展性强,可维护性强

    缺点:编程复杂度高

    应用场景:对扩展性要求较高的地方

  4、代码演示

def choose_course(stu_dict, course):
    stu_dict['course'].append(course)
    print('%s选课成功 %s' % (stu_dict['name'], stu_dict['course']))


stu1 = {
    'name': 'jason',
    'age': 18,
    'gender': 'male',
    'course': [],
    'choose_course': choose_course
}

stu2 = {
    'name': 'ly',
    'age': 18,
    'gender': 'male',
    'course': [],
    'choose_course': choose_course
}

stu1['choose_course'](stu1, 'python')
stu2['choose_course'](stu2, 'python')

类的定义和对象的产生

  1、类和对对象的定义

    对象:特征与技能的结合体

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

    强调:站在不同的分类,划分的分类不一定一样

  2、类和对象的先后顺序

    1、程序中

      必须先定义类,然后调用类产生对象

    2、现实生活中

      先有对象,再有类

  3、类的语法

class 类名:
    '类的文档字符串'
    类体
    
#我们创建一个类
class Data:
    pass

   强调:类名定义都是驼峰体,即单词的首字母大写

  4、定义类所发生的事

    1、立即执行类体代码

    2、产生一个类的名称空间,把类体里面执行的名字都扔到名称空间中(就是大字典中)

    3、把类的名称空间绑定给__dict__,类名 .__dict__

  5、代码演示

class Student():
    # 定义一个属性
    school = 'SH'

    # 定义一个技能(函数)
    def choose_course(stu_dict, course):
        stu_dict['course'].append(course)
        print('%s选课成功 %s' % (stu_dict['name'], stu_dict['course']))

  6、查看类的名称空间

print(Student.__dict__)

  7、产生对象

    调用类产生对象时,默认产生的就是一个空对象{}

stu1 = Student()
stu2 = Student()
stu3 = Student()

print(stu1.__dict__)
print(stu2.__dict__)
print(stu3.__dict__)

给对象定制自己独有的属性

  1、调用类发生的事

    1、得到一个空对象

    2、调用Student.__dict__(空对象,'tony' . 18. 'male')

    3、得到一个初始化的结果

  2、代码

class Student():
    # 定义一个属性
    school = 'SH'

    # 初始化方法
    # 调用类自动触发的函数
    # 该方法不是一定要定义,需要用到就定义,不需要刻意不定义
    def __init__(stu_obj, name, age, gender):
        # 空对象.name = name
        # 空对象.age = age
        # 空对象.gender = gender
        stu_obj.name = name  # stu1.__dict__['name'] = 'tony'
        stu_obj.age = age  # stu1.__dict__['age'] = 18
        stu_obj.gender = gender  # stu1.__dict__['gender'] = 'male'、
        # return None # 在这个方法中不能有返回值,
    # 定义一个技能(函数)
    def choose_course(stu_dict, course):
        stu_dict['course'].append(course)
        print('%s选课成功 %s' % (stu_dict['name'], stu_dict['course']))

stu1 = Student('tonmy', 18, 'male')
stu2 = Student('tom', 18, 'male')
# stu1 = Student()
# print(stu1.__dict__)

# print(stu1.name)
# print(stu2.name)

  注:属性的查找:先从自己的对象中查找,然后再去产生对象的类中去找

属性的查找顺序

  1、代码

class Student():
    # 定义一个属性
    school = 'SH'

    def __init__(self, name, age, gender, course=None):
        if course is None:
            course = []
        self.name = name  # stu1.__dict__['name'] = 'jason'
        self.age = age  # stu1.__dict__['age'] = 18
        self.gender = gender  # stu1.__dict__['gender'] = 'male'
        self.course = course
    def choose_course(self, course):
        # stu_dict => stu
        self.course.append(course)
        print('%s选课成功 %s' % (self.name, self.course))
    stu = Student('tony', 18, 'male')

  2、属性的查找

    1、类属性:在类中写的属性就称之为类属性

    2、对象属性:在对象自己的名称空间中的属性就是对象属性

  3、类属性的增删改查

    1、查

print(Student.school)

    2、增

Student.country = 'China'

    3、改

Student.school = 'BJ'

    4、删

del Student.school

  4、对象属性的增删改查

    1、查

print(stu.name)

    2、增

stu.aaa = 'aaa'

    3、改

stu.name = 'bbb'

    4、删

del stu.name

  5、类和对象调用方法

   1、类调用方法

    类来调用,函数的参数有几个就要传几个

   2、对象调用方法

    类中的方法,类可以调用,对象也可以调用;但是推荐对象来调用,因为对象来调用,会把自己当作第一个参数传递给函数

 

posted @ 2021-12-02 20:13  那就凑个整吧  阅读(161)  评论(0编辑  收藏  举报