Python课堂19——面向对象

文章目录


前言

面向对象是一种编程范式,以对象作为程序的基本单位,通过定义对象的属性和方法,来描述对象的行为和特征。Python是一种支持面向对象编程的语言,提供了丰富的面向对象的特性和语法。

在Python中,对象是由类创建的,一个类是一个对象的蓝图或模板,定义了该类对象的属性和方法。类可以看作是一种自定义的数据类型,可以创建多个该类的对象。为大型程序的开发提供便利!


一、面向过程和面向对象

  1. 面向过程:先分析出解决问题的步骤,再把步骤拆分成一个个方法(函数)是没有对象去调用的,只是由单个的函数语句执行。
  2. 面向对象:把变成当做是一个事物(对象),将程序中的数据和操作封装在一起,形成一个对象。在面向对象编程中,程序的执行是通过对象之间的交互来完成的。

面向对象的核心就是将对象的数据和将要实现的功能整合成一个整体

二、类和对象

1.类

定义:对一系列具有相同属性和事物的统称,是一个抽象的概念,不是真实存在的事物。

基本格式:

class 类名:(类名遵循大驼峰的命名规则,前面的章节中说过)

代码块

代码如下:

python 复制代码
class Student:
	pass

2.对象

定义:类的具体表现

实例化(创建)对象的格式:对象名 = 类名()

python 复制代码
s1 = Student()

注意:

1.先有类,后有对象

2.类只有一个,对象有多个

3.类存在的意义:存放对象共同的功能和属性数据

实例展示:(学生选课系统)

python 复制代码
'''
    选课对象:学生
        属性:姓名、学号、课程
        功能:选课、查课
    谁上课?老师
        属性:班级、id
        功能:选择上课
'''
class Student:
    def choose(self):
        print('学生选课')

    def check_course(self):
        print('学生查课')


s1 = Student()
s2 = Student()
print(s2)
print(s1)
# 实例化多个对象的内存地址不同,可以创建一个或者多个对象,互不影响

3.类中定义的方法

3.1  实例方法:是给对象用的,会自带有self参数

代码演示

python 复制代码
class Student:
    def choose(self):
        print('选课')
        print(f'实例方法;', self)  # 谁调用它,self就是谁

    def check_course(self):
        print('查课')

s1 = Student()  # 调用类的过程称之为类的实例化,拿到的返回值是程序中的对象,称之为一个实例,实例对象
s2 = Student()
print(s2)
print(s1)
# 通过实例化一个对象 / 通过类创建一个对象

如何调用类中的函数?

语法:对象名.实例方法()

python 复制代码
s1.choose()
s2.choose()

# 类调用实例方法
# Student.choose()  # 缺少一个self参数

print(s1)  # <__main__.Student object at 0x000001F59B970CC8>
s1.choose()  # <__main__.Student object at 0x000001F59B970CC8>
# 实例方法中的哪个对象调用,self就是这个参数的内存地址

4.定义类中的属性

4.1 类属性:定义在类中,并且在函数体外的属性,所有的实例对象都可以用

python 复制代码
class Student:
    a = 'abc'
    school_name = 'university'
    name = '小明'
    def choose(self):
        print('选课功能')
 
s1 = Student()
s2 = Student()
s3 = Student()

访问方式:

(1)对象.属性名:print(s1.a)

(2)类.属性名:print(Student.a)
注意:类和对象都可以访问类属性

修改类属性:

(1)对象修改:对象.属性 = 新的值,对象不能修改类属性,做修改的操作其实只是给自己空间里新增了一个新的实例属性。

python 复制代码
s1.a = '9999'
print(s1.a)  # 9999
print(s2.a)  # abc
print(s3.a)  # abc 
print(Student.a)  # abc

(2)只能由类去修改类属性

python 复制代码
Student.a = 'Hahahhah'
print(s1.a)  # Hahahhah
print(s2.a)  # Hahahhah
print(s3.a)  # Hahahhah
print(Student.a)  # Hahahhah
# 学生类里类属性,所有的学生去访问的值都一样,可以把学生共用相同的数据值定义为类属性,比如:学校的名称、学校的地址
# 学生的名字能定义为类属性 ,所有的学生名字很明显不一样,如果定义为类属性,所有学生名字一样,乱套了。

4.2 实例属性:实例对象帮的属性,仅对象所独有

方法:创建实例对象后,动态的对属性进行绑定 对象名.属性 = 属性值

python 复制代码
class Student:
    # a = 'abc'
    school_name = '好学大学'
    def choose(self):
        print('选课功能')

s1 = Student()
s1.name = '小明'
s1.course = 'python'
s2 = Student()
s2.name = '小红'
s2.course = 'java'
s3 = Student()
s3.name = '小帅'
s4 = Student()
s4.name = '小林'
# 问题:把名字属性定义为类属性,创建对象后,再手动的对名字属性进行修改,比较麻烦。
# 引入构造函数来解决

5.构造函数

语法:def init (self):

特点:每当创建一个对象的时候,自动调用该方法

python 复制代码
class A:
    def __init__(self):
        print('自动调用')
s1 = A()  # 自动调用
s2 = A()  # 每创建一个对象,自动调用

属性初始化数值操作

方法一:对象.属性名 = 数值

方法二:self.属性名 = 数值

python 复制代码
class Student:
    a = 'abc'

    def __init__(self, Name, Course, Id):
        self.name = Name
        self.course = Course
        self.id = Id

    def choose(self):
        print('选课')
        print(f'实例方法;', self)  # 谁调用它,self就是谁

    def check_course(self):
        print('查课')


s1 = Student('Abner', 'pyhton', '029')
print(s1.name)
# 在类的外面:对象.属性名
# 在类的里面:self.属性名

# 类属性:所有对象所共有的
# 实例属性:所有对象独有的

6.析构方法和__str__(拓展)

python 复制代码
class A:
    def __init__(self):
        self.name = 'Abner'
        print('创建对象的时候自动调用')

    def __str__(self):
        # 返回对象的一个描述信息------字符串
        return f'对象名:{self.name}'

    def __del__(self):
        # 删除一个值,销毁一些实例对象,调试功能,能做一些什么工作
        print('销毁对象的时候做的一些操作以及程序执行的最后也会触发这个操作')
        # 比如关闭一些文件
s1 = A()
print(s1)

总结

面向对象的学习是我们进入高级编程学习的第一步,继续加油,相信你会成为一名优秀的编程师。

努力的时间还不够 哪有时间去绝望啊 ------ 余安

相关推荐
MarsBighead2 分钟前
(二)PosrgreSQL: Python3 连接Pgvector出错排查
python·postgresql·向量数据库·pgvector
可涵不会debug6 分钟前
C语言文件操作:标准库与系统调用实践
linux·服务器·c语言·开发语言·c++
深蓝海拓22 分钟前
Pyside6(PyQT5)中的QTableView与QSqlQueryModel、QSqlTableModel的联合使用
数据库·python·qt·pyqt
无须logic ᭄30 分钟前
CrypTen项目实践
python·机器学习·密码学·同态加密
百流42 分钟前
scala文件编译相关理解
开发语言·学习·scala
Channing Lewis43 分钟前
flask常见问答题
后端·python·flask
Channing Lewis44 分钟前
如何保护 Flask API 的安全性?
后端·python·flask
水兵没月2 小时前
钉钉群机器人设置——python版本
python·机器人·钉钉
Evand J2 小时前
matlab绘图——彩色螺旋图
开发语言·matlab·信息可视化