python 基础(十六)面向对象----类与对象

目录

16.1 面向对象

16.2 面向过程与面向对象

16.3 类与对象

16.3.1 对象的创建 

  16.3.2 实例成员

16.3.3 类成员 

16.3.4 魔法方法

16.3.4.1 综合案例

 16.4 作业

16.5 作业解析 


16.1 面向对象

编程语言种分两大类 
1.面向对象编程
    python java c++ js
    python是面向对象最具有代表性的一种语言
    概念:万物皆对象 把你看到的 想到的 摸到的理解成为一个对象
    对象:泛指生活的任何东西

    生活中的对象有什么用吗?
        电脑:
            上网
            打游戏
            看直播...
            电脑给你提供了上网打游戏 和看直播的功能...


    # 面向对象思想:自己本身不实现任何功能 去找拥有这个功能的对象来帮助我实现这个功能
    
2.面向过程编程
    c 易语言 汇编语言...
    思维:如果想要去实现一个功能 会把这个功能分解成无数个小功能 然后挨个实现

    把一个问题分解成无数个小问题 然后挨个实现 当所有的小问题全部实现了之后 那么这个问题就解决了

    案例:辣椒炒蛋
        1.准备材料  功能1
            鸡蛋 辣椒 盐
        2.起锅烧油  功能2
        3.放入食材 炒熟 功能3
        4.盛出装盘  功能4

16.2 面向过程与面向对象

面向过程:核心是过程二字,过程指的是解决问题的步骤。编程的时候先把解决问题的步骤分析出来,然后用函数把这些步骤实现,在一步一步的具体步骤中再按顺序调用函数。适合简单任务,不需要过多协作。

面向对象:核心是对象二字,对象是由属性和方法组成的。编程的时候首先思考的是怎么设计这个事物。 比如思考造车,我们就会先思考“车怎么设计?”,而不是“怎么按步骤造车的问题”。找轮胎厂完成制造轮胎的步骤,发动机厂完成制造发动机的步骤;这样,发现大家可以同时进行车的制造,最终进行组装,大大提高了效率。

面向对象可以帮助我们从宏观上把握、从整体上分析。 但是,具体到实现部分的微观操作,仍然需要面向过程的思路去处理。我们千万不要把面向过程和面向对象对立起来。他们是相辅相成的。面向对象离不开面向过程

一个经典的比喻:面向对象是盖浇饭。盖浇饭的好处就是“菜”“饭”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。

16.3 类与对象

  • 类:一个抽象的概念,即生活中的”类别”。

    • 类中的所有变量称为属性

    • 类中的所有函数通常称为方法

  • 对象:类的具体实例,即归属于某个类别的”个体”。

定义类:

  • Python中定义一个类使用class关键字实现

  • 在给类起名字时,建议每个单词的首字母大写,其它字母小写。

  • 给类起好名字之后,其后要跟有冒号:,表示告诉 Python 解释器,下面要开始设计类的内部功能了,也就是编写类属性和类方法。

  • 类属性指的就是包含在类中的变量,而类方法指的是包含类中的函数。

    换句话说,类属性和类方法其实分别是包含在类中的变量和函数的别称。 需要注意的一点是,同属一个类的所有类属性和类方法,要保持统一的缩进格式

16.3.1 对象的创建 

  • 创建类对象的过程,又称为类的实例化。

  • 对已定义好的类进行实例化,其语法格式如下:

类名()

__init__()类构造方法:在创建类时,我们可以手动添加一个 __init__()方法,该方法是一个特殊的类实例方法,称为构造方法。构造方法用于创建对象时使用,每当创建一个类的实例对象时,Python 解释器都会自动调用它。Python 类中,手动添加构造方法的语法格式如下:

def __init__(self,...):
    代码块 

注意,__init__,开头和结尾各有 2 个下划线,且中间不能有空格。Python 中很多这种以双下划线开头、双下划线结尾的方法,都具有特殊的意义

如果__init__方法有参数的话:在实例化的时候除了self,其他的需要手动传递参数

语法:
class 类名:
#    多个(≥0)类属性...
#    多个(≥0)类方法...
'''


# 1.需求:洗衣机, 功能:能洗衣服
# 1.定义洗衣机类
class Washer():
    def wash(self):
        print('能洗衣服')


# 2.创建对象 //实例化一个对象
# 对象名 = 类名()
haier = Washer()

# 3.验证结果
# 3.1 打印haier对象
print(haier)


# 3.2 使用wash功能 --实例方法/对象方法  --- 对象名.wash()
haier.wash()

  16.3.2 实例成员

  • 实例属性

    • 通过对象赋值为创建,再次赋值为修改

      • 对象 = 类名()
        对象.属性名 = 值
    • 通常在构造函数(__init__)中创建。

    • 每个对象存储一份,通过对象访问。描述某个对象的数据。

  • 实例方法

    • 至少有一个形参,第一个参数绑定调用这个方法的对象,一般命名为"self"。

    • self:表示为一个默认的参数 如果是实例对象调用这个实例方法 那么这个参数不需要传递数据 如果是类对象调用这个实例方法 则需要传递一个指定的对象才能够执行

16.3.3 类成员 

  • 类属性:在类中,方法外定义变量。

    • 存储在类中,只有一份,被所有对象共享。

    • 作用:描述所有对象的共有数据。

  • 类方法:

    • @classmethod
      def 方法名称(cls,参数列表):
          方法体
    • 至少有一个形参,第一个形参用于绑定类,一般命名为'cls'

    • 类方法中不能访问实例成员,实例方法中可以访问类成员。

    • 用于操作类变量.

16.3.4 魔法方法

'''
魔法方法:
在Python里面,两个下划线开头 两个下划线结尾,并且在满足特定条件下自动调用的这类方法  叫做魔法方法
__init__: 初始化方法
    1.调用时机:在创建对象之后,会立即调用
    2.作用:
        1.用来给对象添加属性,给对象属性一个初始值
        2.代码业务的需求,每创建一个对象,都需要执行的代码可以写__init__中
    注意点:
        如果__init__有除了self只有的参数,那么在创建对象的时候需要给额外的形参传递实参值
        __init__(self)中的self参数,不需要开发者传递,Python解释器会自动把当前的对象引用传递过去。
'''


# 1.定义类  ---  class 类名():
class Dog():
    def __init__(self, name, age):
        print('我是__init__方法,我被调用了')
        # 对象.属性名 = 值
        self.name = name
        self.age = age


dog = Dog('大黑', 1)
print(dog.name)

dog1 = Dog('大黄', 2)
print(dog1.name)

16.3.4.1 综合案例

# 定义一个用户类 ,用户名和密码是这个类的属性
# 1.实例化两个用户,分别有不同的用户名和密码
# 2.设计一个方法  ,修改密码
# 旧式类定义
class User:
    def __init__(self, username, password):
        self.username = username
        self.password = password
        print(f'用户名:{self.username},密码:{self.password}')

    def reset_password(self, password_new):
        self.password = password_new
        print(f'用户名:{self.username},密码:{password_new}')


A = User('lisi', 12345)
B = User('zhangsan', 12345)
# A.reset_password(12347)

class C:
    A.reset_password(123456)

c = C()

 16.4 作业

 1.    什么是面向对象?

 2.   类和对象的关系是什么?

 3.设计一个桌子类,长度宽度和高度

16.5 作业解析 

# 1.	什么是面向对象?
print('答:是一种抽象化的编程思想,')
# 2.	类和对象的关系是什么
print('答: 类创造了对象')
# 3.设计一个桌子类,长度宽度和高度
class Desk():
    def __init__(self,passworld,money,width,height):
        print("老师买了一个小桌子用来吃饭")
        #桌子的名字
        self.passworld=passworld
        #桌子的价格
        self.money=money
        print(f'桌子的名字为{passworld},桌子的价格为{money}')
        #桌子的宽度
        self.width=width
        #桌子的高度
        self.height=height
        print(f'桌子的宽度为:{width},桌子的高度为:{height}')

yyds=Desk('小桌子','78元',720,560)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值