面向对象、类[Python常见问题]

一、面向对象

什么是面向对象?

  面向对象是一门编程思想!

  

  面向过程编程思想与面向对象编程思想对比:

    - 面向过程编程思想:

      核心是 “过程”二字,过程是指解决问题的步骤,即先干什么再干什么!

      基于该编程思想编写程序,就好比在设计一条工厂流水线,一种机械式的思维方式

      优点:

        将复杂的问题流程化,进而简单化

      缺点:

        牵一发而动全身,程序的可扩展性差

    - 面向对象编程思想:

      核心是 “对象” 二字,对象指的是“特征与技能”的结合体。

      基于该编程思想编写程序,就好比把自己当做一个上帝在创造世界,一种“上帝式”的思维方式

      优点:

        可扩展性高

      缺点:

        面向对象编写程序的复杂程度比面向过程高

  注意:编程思想仅仅是一门思想,与任何技术无关

 

 

二、类

1、什么是类?

  类指的是类型、类别。

  在两种角度去看待类:

    - 现实世界中:

      - 先有一个个对象,经过社会的文明发展,随之总结出类,对象是实际存在的,而类是抽象产生的

    - python程序中:

      - 必须先由类,再通过调用类产生对象

 

  对象指的是“特征与技能”的结合体, 类指的是一系列“对象之间相同的特征与技能”的结合体

 

2、如何定义类?

  如何写类并产生对象:

    - 先从现实世界中通过一个个对象总结出类

    - 然后再定义类,后调用产生对象。

 

  比如 “选课系统”:

    选课系统 – 学生类:

      - 学生对象1:

        特征:

          - 姓名:tank

          - 性别:female

          - 年龄:95

          - 学校:家里蹲

        技能:

          - 技术:python

          - 学习:learn

          - 选课:course

 

      - 学生对象2

        特征:

          - 姓名:jason

          - 性别:female

          - 年龄:99

          - 学校:家里蹲

        技能:

          - 技术:python

          - 学习:learn

          - 选课:course

 

3、定义类的语法

  语法:

    class 关键字:帮你产生类

 

    class 类名:

      - 对象之间相同的特征

        - 学校

        school = “家里蹲”

      - 对象之间相同的技能

        - python

          def Python():

            pass

        - learn

          def Learn():

            pass

        - course

          def Course():

            pass

 

  类名的规范:

    - 驼峰命名法(推荐)

 

  定义一个学生类并对属性进行增删查改:

# 定义一个家里蹲学生类
class JldStudent:    # 类名指向的是类的内存地址
    # 学生相同的特征
    # 在类中的特征(即变量)称之为“属性”
    school = "OldBoy"


    # 注意:在类内部定义函数,会默认产生一个参数self
    # 学生相同的技能(即函数)称之为“方法”
    def learn(self):    # self此处当做一个形参
        print("learning...")


# 查看类的名称空间
print(JldStudent.__dict__)
print(JldStudent.__dict__["school"])    # 可调用属性
print(JldStudent.__dict__["learn"])    # 获取learn方法对象
JldStudent.__dict__["learn"](123)    # 方法对象+(),相当于执行learn函数(方法)

# 类提供了一种特殊获取名字的方式  “类名.名字”的方式
# 查
print(JldStudent.school)
JldStudent.learn(12)

# 改
JldStudent.school = "Cld"
print(JldStudent.school)

# 删
del JldStudent.school
# print(JldStudent.school)    # AttributeError: type object "JldStudent" has no attribute "school"

# 增
JldStudent.age = 18
print(JldStudent.age)
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 面向对象、类