python之面向对象编程

本文深入探讨了面向对象编程的概念,解释了为何要使用面向对象编程以增强程序的扩展性和可维护性。介绍了类的定义、对象的创建以及属性的查找顺序,同时展示了如何通过类和对象实现数据与功能的封装。文中还通过实例演示了初始化方法`__init__`的应用,以及属性查找的顺序,强调了面向对象编程在实际编程中的应用和重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

面向对象编程

什么是面向对象

1. 什么是对象?
	在程序中:
		函数: 是存放数据的容器,一个函数就是一个功能
		对象: 是盛放数据和功能的容器

为什么要用面向对象

在前面学习的面向过程中,我们知道了,面向过程编程具有一定的局限性,
虽然能够使得复杂的问题流程化,进而简单化。但是其扩展性差,可维护性差.
不能适用于对于扩展性要求较高的地方。
为了解决这一问题,咱们需要通过面向对象编程来解决这一问题!
	优点: 扩展性强, 可维护性强 具有

怎么用面向对象

在使用面向对象之前,咱们得先知道类和对象到底是什么。类即类别/种类,是面向对象分析和设计的基石,如果多个对象有相似的数据与功能,那么该多个对象就属于同一种类。有了类的好处是:我们可以把同一类对象相同的数据与功能存放到类里,而无需每个对象都重复存一份,这样每个对象里只需存自己独有的数据即可,极大地节省了空间。所以,如果说对象是用来存放数据与功能的容器,那么类则是用来存放多个对象相同的数据与功能的容器。

类的定义和对象的产生

在这里插入图片描述

1.怎么定义类
对象: 特征与技能的结合体
类:一系列对象相似的特征与相似的技能的结合体

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

# 问题来了:
	到底是先有类还是先有对象?
    1. 程序中:
    	必须先定义类,然后调用类产生对象
    2. 现实生活中:
    	先有对象,在有人类
        
'''
1. 函数的定义
	def 函数名():
		pass
	
2. 类的定义
	class 类名():
		pass
'''        

在这里插入图片描述

2.定义类时,发生了什么
在定义类时
1. 立即执行了类体代码
2. 产生一个类的名称空间, 把类体里面执行的名字都扔到名称空间中(字典)
3. 把类的名称空间绑定给__dict__, 类名.__dict__

# 类名一般情况首字母大写
class Student():
    # 定义一个属性
    school = 'SH'

    # 定义一个技能(函数)
    def choose_course(stu_dict, course):
        stu_dict['course'].append(course)
        print('%s选课成功 %s' % (stu_dict['name'], stu_dict['course']))
3.对象的产生
再调用类时,会默认产生一个空对象{}
stu1 = Student()
stu2 = Student()
stu3 = Student()

print(stu1.__dict__)  # {}
print(stu2.__dict__)  # {}
print(stu3.__dict__)  # {}

在这里插入图片描述

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

    # 初始化方法
    # 调用类自动触发的函数
    # 该方法不是一定要定义,需要用到就定义,不需要刻意不定义
    def __init__(stu_obj, name, age, gender):
        stu_obj.name = name  # stu1.__dict__['name'] = 'jason'
        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']))

        # 调用类发生了几件事?
'''
    1. 得到一个空对象
    2. 调用了Student.__dict__(空对象,'ly', 18, 'male'),
    3. 得到一个初始化的结果。
'''
stu1 = Student('ly', 18, 'male')
stu2 = Student('jiejie', 18, 'male')

print(stu1.__dict__)  # {'name': 'ly', 'age': 18, 'gender': 'male', 'couser': []}
print(stu2.__dict__)  # {'name': 'jiejie', 'age': 18, 'gender': 'male', 'couser': []}

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

# 属性的查找:先从自己的对象中查找,然后在去产生对象的类中取找
print(st1.school)  # SH
# 赋值时,若对象名称空间中不存在则会建立一个新的(字典的用法)
stu1.school = 'aaaa'
print(stu1.school)  # aaa

在这里插入图片描述

属性的查找顺序
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))

    def func(self, name, age):
        pass

# 属性的查找:
# 1. 类属性: 在类中写的属性就称为类属性
# 2. 对象属性:在对象自己的名称空间中的属性就是对象属性

# 类属性的查找
# 1. 查
print(Student.school)

# 2. 增加
Student.country = 'China'


# 3. 改
Student.school = 'BJ'

# 4. 删除
del Student.school
print(Student.__dict__)

stu = Student('ly', 18, 'male')  # 实例化对象, stu就是一个实例
# 对象属性
# 1. 查
print(stu.name)
print(stu.age)
print(stu.gender)

# 2. 增
stu.aaa = 'aaa'

# 3. 改
stu.name = 'bbb'

# 4. 删除
del stu.name
print(stu.__dict__)


# 类中的方法,类可以调用,对象也可以调用
# 类调用方法
Student.choose_course(stu, 'python') # 类来调用,函数的参数有几个就要传几个
print(Student.choose_course)

# 对象调用方法
# 类中的方法,类可以调用,对象也可以调用, 但是,推荐对象来调用,因为对象来调用,会把自己当成第一个参数传递给函数
stu.choose_course('python') # stu.choose_course(stu, 'python')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

go&Python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值