面向对象编程

面向过程编程

  面向过程的核心是过程二字,指的是解决问题的流程,即先干什么,再干什么,最后干什么。

  举例:把大象装冰箱里分为几部:

      1.打开冰箱门

      2.把大象放进去

      3.关上冰箱门

  优点:将复杂的问题流程化,进而简单化。

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

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

 

 

 

面向对象的概念

  对象的概念

    1.程序中:

      函数是盛放数据的容器。

      对象是盛放数据和函数的容器。

    2.现实生活中:

      一切皆对象。

      对象是特征与技能的结合。

  与面向过程的比较

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

    缺点:编程复杂度高。

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

  举例:选课系统

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


# 学生作为对象
stu1 = {
    # 将姓名等作为特征
    'name': 'tom',
    'age': 18,
    'gender': 'male',
    'course': [],
    # 将选课的函数作为技能
    'choose_course': choose_course
}
# 学生作为对象
stu2 = {
    # 将姓名等作为特征
    'name': 'jerry',
    'age': 18,
    'gender': 'male',
    'course': [],
    # 将选课的函数作为技能
    'choose_course': choose_course
}
# 调用函数将自身作为参数传入
stu1['choose_course'](stu1, 'python')
stu2['choose_course'](stu2, 'python')
复制代码

 

  结果:

 

 

 

 

 

 类的定义和对象的产生

  类的概念

    对象是特征和技能的结合体。

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

    对于不同的划分的标准,划分的类不一定一样。

    在现实生活中:

      是先有对象再有类。

    在程序中:

      要先定义类再调用类产生对象。

  类的定义

    定义类的语法:

      class 类名():

        类体代码

    需要注意的是:类名的命名方式一般是驼峰体。

    在执行类的代码时:

      1.立即执行类体代码。

      2.产生一个类的名称空间,将类体代码执行产生的名字都放到类的名称空间中。

      3.把类的名称空间绑定给__dict__,用类名__dict__的方式可查看类的名称空间。

    依旧以学生选课系统为例:

复制代码
class Student():
    # 定义一个共同属性
    school = 'university'

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


# 查看类的名称空间
print(Student.__dict__)
# 产生对象
# 调用类产生对象,默认产生的就是一个空对象{}
stu1 = Student()
print(stu1.__dict__)
复制代码

 

  结果:

 

 

 

定制对象独有属性

  

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

    # 初始化方法
    # 调用类自动触发的函数
    def __init__(self, name, age, gender, course=None):
        if course is None:
            course = []
        self.name = name
        self.age = age
        self.gender = gender
        self.course = course
        # return None # 在这个方法中不能有返回值

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


stu1 = Student('tom', 18, 'male')
print(stu1.__dict__)
复制代码

 

  函数在调用时:

    1.得到一个空对象

    2.调用了student.__dict__

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

  结果:

 

 

属性的查找顺序

  类属性:在类中写的属性就是类属性

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

  类属性在查找时查找的是类的名称空间中的名称。

  对象属性现在对象的名称空间中找,找不到再去类的名称空间找。

  调用方法

    类中的方法,类可以调用,对象也可以调用。

    但是,推荐对象来调用,因为对象来调用,会把自己当成第一个参数传递给函数。

    因此在定义对象是推荐将第一个参数写为self(表示自己)。

 

posted @   临江沂水  阅读(47)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示