面向对象编程

  • 面向过程概念
  • 面向对象概念
  • 类的定义和对象的产生
  • 属性或者方法的查找
  • 练习

面向过程:

  • 不是一门技术,是一种编程思想
  • 核心是过程 过程就是想干什么,再敢什么,最后干什么,机械式思维
  • 案例:
    • 把大象关进冰箱
      1. 打开冰箱
      2. 把大象放进去
      3. 关闭冰箱
  • 案例二
    • 优点:
      • 复杂的问题简单化,流程化
    • 缺点:
      • 扩展性差,可维护性差

应用场景:对扩展性要求不高

问题:

  • 实现用户注册:
    1. 输入用户名密码
    2. 验证参数
    3. 注册

面向对象:

  • 核心是 ‘对象‘ 二字

    1. 程序里面

      ? 对象就是盛放数据属性和功能的容器,

    2. 现实中

      ? 对象就是特征与技能的结合体

      Linux:一切皆文件

  • 优点:扩展性强

  • 缺点:编程复杂度高

  • 应用场景:对扩展性要求较高的场景,比如:qq,微信

  • 案例:

    ? 西天取经

    ? 学生选课内容

类和对象

对象:特征和节能的结合体

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

强调:站在不同的角度,划分的分类是不一样的

问题: 先有类还是先有对象

  1. 现实中:

    必须先有对象才有类

    1. 程序中:

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

专业语法

定义类

class 类名:
    psaa
    
def 函数名():
    pass
    
类名:  一般是首字母大写

类的定义阶段发生了什么是?

1. 立即执行类体代码
2. 产生了类的名称空间,把类里面定义的名字都扔到字典里
3. 把类的名称空间绑定为类名	类名-dic_

产生对象发生了几件事

? 1. 产生一个空对象,并且把该空对象当作第一个参数传递

调用类的过程就是实例化,得到的对象就是一个实例

定制对象自己独有的属性

# 版本3


"""
    产生对象发生了几件事?
        1. 产生一个空对象,并且把该空对象当成第一个参数传递
"""

class Student():
    school = ‘SH‘

    # 初始化方法
    def __init__(stu_obj, name, age, gender, courses=[]):
        stu_obj.name = name  # stu1.__dict__[‘name‘] = ‘egon‘
        stu_obj.age = age  # stu1.__dict__[‘age‘] = 20
        stu_obj.gender = gender  # stu1.__dict__[‘gender‘] = ‘male‘
        stu_obj.courses = courses  # stu1.__dict__[‘courses‘] = []

    def choose_course(stu_dic, course):
        stu_dic[‘courses‘].append(course)
        print("%s 选课成功 %s" % (stu_dic[‘name‘], stu_dic[‘courses‘]))


    # print(123)


# 类的名称空间
# print(Student.__dict__)
stu1 = Student(‘egon‘, 18 ,‘male‘)

print(stu1.__dict__)
# stu2 = Student()

# stu1.name = ‘egon‘      # stu1.__dict__[‘name‘] = ‘egon‘
# stu1.age = 18           # stu1.__dict__[‘age‘] = 20
# stu1.gender = ‘male‘    # stu1.__dict__[‘gender‘] = ‘male‘
# stu1.courses = []       # stu1.__dict__[‘courses‘] = []
#
#
# stu2.name = ‘tom‘      # stu2.__dict__[‘name‘] = ‘egon‘
# stu2.age = 18           # stu2.__dict__[‘age‘] = 20
# stu2.gender = ‘male‘    # stu2.__dict__[‘gender‘] = ‘male‘
# stu2.courses = []       # stu2.__dict__[‘courses‘] = []


#
# init(stu1, ‘egon‘, 18, ‘male‘)
# init(stu2, ‘tom‘, 18, ‘male‘)
#
#
# print(stu1.__dict__)
# print(stu2.__dict__)

属性查找

class Student():
    school = ‘SH‘
    # 初始化方法
    def __init__(stu_obj, name, age, gender, courses=[]):
        stu_obj.name = name  # stu1.__dict__[‘name‘] = ‘egon‘
        stu_obj.age = age  # stu1.__dict__[‘age‘] = 20
        stu_obj.gender = gender  # stu1.__dict__[‘gender‘] = ‘male‘
        stu_obj.courses = courses  # stu1.__dict__[‘courses‘] = []

    def choose_course(self, course):
        self.courses.append(course)
        print("%s 选课成功 %s" % (self.name, self.courses))


    # print(123)


# 类的名称空间
# print(Student.__dict__)
stu1 = Student(‘egon‘, 18 ,‘male‘)
stu2 = Student(‘tom‘, 18 ,‘male‘)

# print(stu1.__dict__)

# 1 类的属性查找
# print(Student.__dict__[‘school‘])

# # Student.__dict__[‘xxx‘] = ‘xxx‘
# del Student.__dict__[‘xxx‘]

# Student.xxx = ‘xxx‘
#
# del  Student.xxx

# Student.school = ‘MMM‘
# print(Student.school)

# print(Student.choose_course)
# Student.choose_course(stu1, ‘python‘)


# 对象操作属性  点语法取值,先从自己对象中取,如果没有,在取类中取值
# print(stu1.school)
#
# stu1.xxx = ‘x‘
# del  stu1.xxx
# stu1.school = ‘y‘

# Student.school = ‘x‘
# print(stu1.school)


# 类中的属性是共享给所有对象的,但是,类中的方法是给对象用的, 并且,把对象自己当成第一个参数传递
# stu1.school = ‘y‘
# print(stu1.school)
#
# print(stu2.school)

stu1.choose_course(‘python‘)

面向对象编程

上一篇:在hdfs文件中寻找指定字符串


下一篇:我的第一个MaBatis程序