Python 程序设计——day12——面向对象编程基础

目录

一、什么是面向对象编程

二、类和对象

1、类和对象的概念

2、面向对象实现方法

2.1 定义类并创建对象

2.2 魔术方法

2.3 类的属性与方法


一、什么是面向对象编程

        面向对象编程是一种程序开发的方法,对象则是这类编程语言的基本程序单元。Python 语言作为面向对象的代表之一,与 C 语言为代表的面向过程编程形成鲜明对比

        面向过程编程,注重于解决问题的步骤。比如当我们想上太空,面向过程编程的做法就是像马斯克一样自己造火箭。而 NASA 的做法是租俄罗斯的火箭,这就是面向对象编程

        面向对象编程是一种编程思维,它将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更加接近人的思维,从而大大提高了编程的效率。换个说法就是面向对象就是将编程当成是⼀个事物,对外界来说,事物是直接使用的,不用去管他内部的情况。这里引用“谦虚且进步”的比喻来辅助理解一下:

  • 面向过程是一种执行者的思维,强调如何取解决,即使很多事情很难解决
  • 面向对象是一种设计者的思维,强调如何规划设计,相当于司令来统筹各方兵力

        Python 支持面向对象的三大特征:封装、继承和多态,本文及后文会对这些概念加以阐述

二、类和对象

        在 Python 中“一切皆对象”,Python 中所有的数据都是对象,包括所有的数据类型

1、类和对象的概念

        类的形式与作用都和函数很相像,都是将代码模块化。用一个形象的比喻:一行行代码就好比满地的螺丝钉,函数就是把这些的螺丝钉放到一个个的小盒子里,而类则是把这些小盒子放到纸箱子里

        在现实世界中,先有一个个具体的对象(object),然后将具有不同特征的对象进行分类,总结出类(class)。而把现实世界里的对象抽象理解为数字世界(即软件)里的对象,然后对这些对象的不同特征进行分析后分门别类,把具有相同或者相似特征的对象进行归类,即抽象成类

        是对一系列具有相同特征(属性)和行为(方法)的事物的统称,是一个“抽象的概念”,不是真实存在的事物。对象是类创建出来的真实存在的事物,例如电脑、火箭。类好比是设计图纸,对象则是电脑、火箭等实体,先有类才能有对象,也就是说类和对象的关系是用类去创建对象

2、面向对象实现方法

2.1 定义类并创建对象

示例1:

# 首先创建一个类
class My_word():  # 这里注意类名一定要使用驼峰命名法,首字母一定要大写
    color = "red"  # 类属性

    # index() print()   # 这些是现成的类方法,其实也就是函数,只有在类里面被称作类方法
    # 类方法与普通函数只有一个特别的区别:它们必须有一个额外的第一个参数名称,按照管理它的名称是self

    def play_game(self):  # 类方法中括号里的self是自动生成的,代表类的实例,必须要有
        print("我要打游戏")

if __name__ == '__main__':   # 这是程序入口,就是一个条件判断,直接输入 main 回车
    word = My_word()    # 这里相当于创建了一个名为 word 的对象,后面必须有()
    word.play_game()    # 调用类方法,完成打印语句,不调用是不会执行的

# 运行结果:我要打游戏

示例2:

class My_friend():
    name = "张三"
    age = 18

    def func1(self):
        # 要在类方法中使用类属性,必须是 self.属性名
        print(f"大家好,我叫{self.name},我今年{self.age}岁了")
        return "看电影"

    def func2(self):
        # 在类方法当中如果要调用其他类方法,必须加上 self
        print(f"{self.name}正在{self.func1()}")

if __name__ == '__main__':  # 程序入口
    func = My_friend()
    func.func2()

# 运行结果:大家好,我叫张三,我今年18岁了
#          张三正在看电影
AI解释代码:
    以上代码定义了一个名为 My_friend 的类,该类具有两个属性 name 和 age,默认值分别为张三和18。该类还定义了两个方法 func1 和 func2。
    func1 方法打印一句话,介绍自己的名字和年龄,并返回一个字符串 "看电影"。
    func2 方法调用了 func1 方法,并且在其中加入了一句话,表明该人正在看电影。
    在程序入口处,实例化了一个 My_friend 的对象,并调用了 func2 方法,输出结果为 "张三正在看电影"。

2.2 魔术方法

        在 Python 中,__xx__() 的函数叫做魔术方法,指的是具有特殊功能的函数

2.2.1__init__():类的实例属性

示例1:不带参数

class My_friend():
    # 实例属性__init__
    def __init__(self):
        self.name1 = "李四"

    # 类属性
    name = "张三"

if __name__ == '__main__':   # 程序入口
    # 类名.类属性的属性名 可以直接输出
    print(My_friend.name)
    My_friend.name = "王五"  # 类属性的特点,容易被修改,不利于数据安全,所以尽量用实例属性
    print(My_friend.name)
    # print(My_friend.name1)  # 直接打印实例属性是会报错的
    print(My_friend().name1)  # 这是打印实例属性的正确方法,类名后要加()

# 运行结果:张三
#          王五
#          李四
AI解释代码:
    以上代码定义了一个名为My_friend的类,该类有一个类属性name和一个实例属性name1。其中,类属性name定义在类中,所有的实例都可以访问它。而实例属性要通过先创建实例,再访问属性来得到。并且,类属性可以被所有实例共享,并且可以被修改,但是实例属性只能在实例内部使用,并且每个实例的属性值互相独立。
    在if __name__ == '__main__'的条件下,程序打印了两次类属性name,第一次输出“张三”,第二次输出“王五”,这证明了类属性是可以修改的。最后,通过实例化类来访问实例属性name1,从而输出了其值“李四”。

示例2:带参数

class My_friend():      # 类的()不是用来传参用的,但是也可以传参
    # __init__()是类的实例属性,可以给类传参,也只能由它给类传参
    # 当类对象被创建的时候,__init__()方法会自动执行
    def __init__(self, name, age):
        # 类的实例属性
        self.name = name
        self.age = age

    def func1(self):
        print(f"大家好,我是{self.name},我今年{self.age}岁了")

if __name__ == '__main__':  # 程序入口

    word = My_friend("李四",20)    # 将实参传入类对象
    word.func1()

# 运行结果:大家好,我是李四,我今年20岁了
AI解释代码:
    以上代码定义了一个名为 My_friend 的类,该类有两个实例属性:name 和 age。类中还定义了一个名为 func1 的方法,该方法会输出实例的姓名和年龄。
    在类的构造方法 __init__ 中,使用 self.name = name 将传入的参数 name 赋值给类的实例属性 name,使用 self.age = age 将传入的参数 age 赋值给类的实例属性 age。这样,在类的实例化时可以通过传入参数的方式给类的实例属性赋值。
    在程序入口处,创建了一个名为 word 的类对象,通过传入参数 "李四" 和 20,将参数赋值给类的实例属性 name 和 age。然后调用 word.func1() 方法,输出 大家好,我是李四,我今年20岁了。

2.2.2__str__():类的实例属性

示例:

# 类的返回值
class My_friend():
    # 当类对象被创建的时候,__init__()方法会自动执行
    def __init__(self):
        self.name = "李四"

    def func1(self):
        return f"我是{self.name}"

    def __str__(self):        # str可以接收任何类型的数据
        return "这是我这个类的返回值"

if __name__ == '__main__':
    word = My_friend()
    print(word.func1())
    print(word)     

# 运行结果:我是李四
#          这是我这个类的返回值
# 如果没有__str__魔术方法的话,print(word)的结果是<__main__.My_friend object at 0x000002B4D30E10D0>
AI解释代码:
    这段代码定义了一个类My_friend,包含了一个构造函数__init__(),一个成员函数func1()和一个特殊方法__str__()。
    构造函数在类被实例化时自动执行,这里将实例属性name初始化为李四。
    成员函数func1()返回一个字符串,其中包括实例属性name的值。
    特殊方法__str__()在类被打印或者转化为字符串时自动执行,此时它会返回一个字符串,即"这是我这个类的返回值"。
    在主程序中,首先创建了一个My_friend类的实例对象word,然后分别调用了它的成员函数func1()和打印word对象。func1()返回一个字符串"我是李四",而打印word则触发了特殊方法__str__(),打印出字符串"这是我这个类的返回值"。

2.3 类的属性与方法

  • 类的私有属性:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问
  • 类的私有方法:两个下划线开头,声明该方法为私有,不能在类的外部被使用或直接访问

示例:

class My_friend():
    def __init__(self):
        self.name = "李四"
        # 私有属性,只能在当前类当中使用
        self.__money = 200
    def func1(self):
        return f"我是{self.name},我有{self.__money}块钱"

    # 私有方法
    def __func2(self):
        pass

    def __str__(self):
        return "我是这个类的返回值"

if __name__ == '__main__':
    word = My_friend()
    print(word.func1())
    print(word)

# 运行结果:我是李四,我有200块钱
#          这是我这个类的返回值
AI解释代码:
    以上是一个简单的Python类定义,其中包括了类的属性和方法的定义。
    定义了一个名为 My_friend 的类,类中包括 __init__ 方法、属性 name、属性 __money、方法 func1、方法 __func2 和方法 __str__。
    在 __init__ 方法中,定义了两个属性,分别是 name 和 __money,其中 __money 是私有属性,只能在当前类中使用。
    func1 方法是一个公有方法,它返回一个字符串,其中包括当前对象的名称和私有属性 __money 的值。
    __func2 方法是一个私有方法,只能在当前类中使用。
    __str__ 方法是一个特殊方法,用于返回当前对象的字符串表示。
    在 if __name__ == '__main__': 下创建了一个 My_friend 对象 word,并分别调用了 func1 和 __str__ 方法打印出结果。其中 func1 返回了字符串 我是李四,我有200块钱,__str__ 返回了字符串 我是这个类的返回值。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值