Python面向对象基础

一、概念

1.1面向对象的设计思想

面向对象是基于万物皆对象这个哲学观点。在Python中,一切皆对象

举例说明:

案例一:我要吃大盘鸡

面向过程 							面向对象

1.自己去买菜						    1.委托一个会砍价的人帮忙去买菜

2.自己择菜						     2.委托一个临时工帮忙择菜

3.自己做菜						     3.委托一个厨师帮忙做菜

4.自己开始吃						    4.自己开始吃

案例二:小明是一个电脑小白,想要配一台电脑,买完零件后需要运到家里,组装完成后打开电脑玩游戏

面向过程 							面向对象

1.小明补充电脑知识					  1.委托一个懂电脑的朋友(老王)去帮忙买零件

2.小明去买零件					    2.委托一个能跑腿的人将零件运送到家里

3.小明把零件带回家里				      3.委托一个会组装电脑的人帮小明组装电脑

4.小明组装电脑				    	4.小明自己打开电脑,开始玩游戏

5.小明开机玩电脑	

1.2 面向过程和面向对象

1.2.1 面向过程
  • 在生活案例中:
    • 一种看待问题的思维方式,在思考问题的时候,着眼于问题是怎样一步一步解决的,然后亲力亲为的去解决问题
  • 在程序中:
    • 代码从上而下顺序执行
    • 每一模块内部均是由顺序、选择和循环三种基本结构组成
    • 程序流程在写程序时就已决定
1.2.2 面向对象
  • 在生活案例中:

    • 也是一种看待问题的思维方式,着眼于找到一个具有特殊功能的具体个体,然后委托这个个体去做某件事情,我们把这个个体就叫做对象一切皆对象
    • 是一种更符合人类思考习惯的思想(懒人思想),可以将复杂的事情简单化,将程序员从执行者角度转换成了指挥者角度
  • 在程序中:
    把数据及对数据的操作方法放在一起,作为一个相互依存的整体——对象

    • 对同类对象抽象出其共性,形成类
    • 类中的大多数数据,只能用本类的方法进行处理
    • 程序流程由用户在使用中决定
    • 使用面向对象进行开发,先要去找具有所需功能的对象,如果该对象不存在,那么创建一个具有该功能的对象

注:面向对象只是一种思想,并不是一门编程语言,也不会绑定编程语言

1.2.3 面向过程和面向对象的优缺点
  • 面向过程:
    • 优点:性能比面向对象高,比如单片机、嵌入式开发等一般采用面向过程开发,因为性能是最重要的因素
    • 缺点:没有面向对象易维护,易复用,易扩展,开销比较大,比较消耗资源
  • 面向对象:
    • 优点:易维护,易复用,易扩展,由于面向对象有封装继承多态的特性,可以设计出低耦合的系统,使得系统更加灵活,更加易于维护
    • 缺点:性能比面向过程低

注:使用面向对象的思维解决问题,核心:对象

二、类和对象

2.1 概念

  • :一个具有特殊功能的实体的集合,是抽象的概念

  • 对象:在一个类中,一个具有特殊功能的实体,能够帮忙解决特定的问题(对象也被称为实例),是具体的存在

  • 两者之间的关系:类用于描述某一类对象的共同特征,而对象则是类的具体存在

  • 先有对象还是先有类?

    • 先有对象,再有类:将多个具有共同特征的对象,提取出来一个类
    • 先有类,再有对象:定义类,通过类创建对象,在代码中常用
  • 举例:

类								对象

人							   张三、李四、王麻子、杨阳。。。

SuperHero             			蝙蝠侠、蜘蛛侠、美国队长。。。

快递   						   顺丰、圆通、申通、韵达。。。

帮助理解:类也是一种数据类型,只不过是自定义的,跟所学过intstrbool等类似。用类实例化对象相当于定义一个类的变量

num = 10
print(type(num))  # <class 'int'>

e = ValueError()   # 类实例化对象 /  定义一个类的变量
print(type(e))   # <class 'ValueError'>

2.2 类的定义

  • 语法
class  类名():

	类体
  • 说明

    • Python中使用class关键字定义类
    # 1.定义一个空类
    class MyClass1():
     pass
    class MyClass2():
     pass
    
    • 类名只要是一个合法的标识符即可,但是要求:遵循大驼峰命名法 ,如:KeyErrorValueErrorNameErrorIndexError…….
    • 尽量使用单个或多个有意义的单词连接而成
    • 通过缩进来体现类体的存在
    • 类体一般包含两部分内容:对类的特征描述(变量)和行为描述(函数)
    # 2.定义非空类
    class MyClass3():
        # 类体
        # a.对类的特征描述:变量
        num = 10
        name = 'zhangsan'
    
        # b.对类的行为描述:函数
        def show(self):
            print("showing")
    
        def func1(self):
            print("11111")
    
  • 总结

    • 类的定义和函数的定义类似,但是,一个函数定义完毕之后,只有调用才会执行其中的代码;类定义完毕之后,其中的代码立马会被加载
    • 同一个py文件中可以定义多个类,但是在实际项目开发中,由于每个类实现的代码可能较为复杂,类的定义建议一个py文件一个类(创建一个包,一个模块中定义一个类)
    • 当一个类定义完成,类中的内容被称为类体,又被称为类的成员,当类被加载的时候,类中的成员也会被加载
    • 和函数相同,类也会引入新的作用域,所以在类中定义的变量或函数,在类的外面无法直接访问
    # 定义函数
    def check():
        print("函数————开始")
        print("函数————结束")
    
    # 定义类
    class MyClass3():
        print("类————开始")
        # 类体
        # a.对类的特征描述:变量
        num = 10
        name = 'zhangsan'
        # b.对类的行为描述:函数
        def show(self):
            print("showing")
        print("类————开始")
    
    
    print(num) # NameError: name 'num' is not defined.
    

    **结果:**类中的内容被打印出来,而函数没有;并且类中定义的变量在外面无法访问

    image-20231020143140851

2.3 对象的创建

对象又叫实例,所以对象的创建又可以叫:创建对象/实例化对象/类的实例化

2.3.1 类中未定义构造函数

构造函数之一:__init__

语法:变量 = 类名()

# 1.未定义构造函数:__init__
# 定义类
class Person():
    pass


# 语法:变量 = 类名()
# 创建对象
p1 = Person()
print(p1)  # <__main__.Person object at 0x000001D2AD83FC50>
p2 = Person()
print(p2)  # <__main__.Person object at 0x000001D2B0D78350>

解释:打印一个自定义类创建的对象,默认情况下,打印的是该对象在内存空间的地址<main.Person object at 0x10ec17400>

总结:

a.创建对象的过程,本质上就是定义变量的过程,该变量中存储的是创建出来的对象
b.打印一个自定义类创建的对象,默认情况下,打印的是该对象在内存空间的地址<__main__.Person object at 0x10ec17400>
c.一个普通类,可以创建无数个对象,每个对象在内存空间中拥有独立的地址
d.类名() 表示创建对象,但是该代码每执行一次,则表示创建一个新的对象
2.3.2 类中定义构造函数

语法:变量 = 类名(xxx,xxx...),说明:xxx,xxx...类似于函数中的传参(实参)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

巧克力配酸奶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值