文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python面向对象编程之怎么理解类的概念

2023-06-25 12:01

关注

这篇文章主要讲解了“Python面向对象编程之怎么理解类的概念”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python面向对象编程之怎么理解类的概念”吧!

1、面向对象基本概念

1.1 万物皆对象

1.2 面向对象编程

面向对象编程又叫OOP(Object-Oriented-Programming)

面向过程与面向对象的区别

面向过程以解决问题的过程步骤为核心编写程序的方式,面向对象以问题对象构建和应用为核心编写程序的方式,所有能用OOP解决的问题,面向过程都能解决。

1.3 面向对象的特征

封装(Encapsulation) :属性和方法的抽象,用数据和操作数据的方法来形成对象逻辑

方法的抽象:对类的属性(变量)进行定义、隔离和保护

继承:代码复用的高级抽象,用对象之间的继承关系来形成代码复用

继承是面向对象程序设计的精髓之一

多态:方法灵活性的抽象,让对象的操作更加灵活、更多复用代码

参数类型的多态:一个方法能够处理多个类型的能力

2、Python面向对象的术语

类(Class)和对象(Object

类定义完成后,默认生成一个类对象,每个类唯一对应一个类对象,用于存储这个累的基本信息 类对象是type的实例,表达为type类型;

属性:存储数据的“变量”(就是定义在类中的变量),用来描述类的一些特性参数。包括:类属性、实例属性

方法:操作数据的“方法”(就是定义在类中的变量),用来给出类的操作功能。包括:类方法、实例方法、自由方法、静态方法、保留方法

实例化:从类到对象的过程,所有“对象”都源于某个“类”

3、Python类的构建

3.1 类的基本构建

Python中,使用class关键字加上类名来定义类,通过缩进我们可以确定类的代码块,就如同定义函数那样。语法结构

class <类名>:    [类描述“documentation string”]    <语句块>

因为Python是脚本语言,定义类不限制位置,可以包含在分支或其他从属语句块中,执行是存在即可

示例代码

class TestClass:    """这是一个测试的类"""    print("Hello Class Object")print(TestClass.__doc__)print(type(TestClass))'''----输出结果----Hello Class Object这是一个测试的类<class 'type'>'''

类对象直接包含的语句会被执行,所有,定义类尽量不在类中直接包含语句

实例对象:实例对象是Python类最常用的方式

创建实例对象语法结构

<对象名> = <类名>([参数])

实例代码:

class TestClass:    print("一碗周")tt = TestClass()print(type(tt))'''----输出结果----一碗周<class '__main__.TestClass'>'''

3.2 类的构造函数

概念:

Python中使用预定义的__init__()作为构造函数

语法结构:

class ClassName:    def __init__(self,[参数1], [参数2], ...[参数n]):        <语句块>    ...

实例代码:

class TestClass:    def __init__(self, name):        print(name)text1 = TestClass("张三")  # 张三text2 = TestClass("李四")  # 李四

通过构造函数__init__可以为Python提供参数

**__init__()**的使用说明

参数:第一个参数约定是self,表示类实例自身,其他参数是实例参数(self是内部使用的,默认保留,其他用户输入的参数放到self后面)

函数名:Python解释器内部定义,由双下划线 (__) 开始和结束

返回值:构造函数没有返回值,或返回为None,否则产生TypeError异常

**self**在类定义内部代表类的实例

3.3 类的属性

属性是类内部定义的变量,语法结构如下:

class ClassName:    <类属性名> = <类属性初值>    def __init__(self,[参数1], [参数2], ...[参数n]):        self.<实例属性名> = <实例属性初值>    ...

实例代码

class TestClass:    count = 0  # 类属性    def __init__(self, name, age):        self.name = name  # 实例属性        self.age = name        TestClass.count += 1  # 实例化一次 count+1students1 = TestClass("张三", "18")students2 = TestClass("李四", "19")print("总数:", TestClass.count)  # 总数: 2print(students1.name, students2.name)  # 张三 李四

3.4 类的方法

(1)实例方法:实例方法是类内部定义的函数,与实例对象无关,语法结构

class ClassName:    def <方法名>(self, <参数列表>):        ...

 <方法名>(<参数列表>)的方式使用实例方法的定义第一个参数是self

实例代码

class TestClass:    def __init__(self, number):        self.number = number    def sum_number(self):  # 实例方法        sum_num = 0        for i in range(self.number + 1):  # 因为循环不会到最后一个数字            sum_num += i        return sum_numnumber1 = TestClass(100)number2 = TestClass(10)print(number1.sum_number())  # 5050print(number2.sum_number())  # 55

(2)类方法:类方法是与类对象相关的函数,有所有实例对象共享,语法结构↓

class ClassName:    @classmethod    def <方法名>(cls, <参数列表>):        ...

<方法名>(<参数列表>)或者<类名>.<方法名>(<参数列表>)的方式使用,类方法至少包含一个参数,表示类对象,建议用@classmethod是装饰器,类方法定义所必须

类方法只能操作类属性和其他类方法,不能操作实例属性和实例方法。

实例代码

class TestClass:    sum_num = 0    def __init__(self, number):        self.number = number    def sum_number(self):        for i in range(self.number + 1):  # 因为循环不会到最后一个数字            TestClass.sum_num += i        return TestClass.sum_num    @classmethod    def test(cls):  # 类方法        test_value = TestClass.sum_num * 2        return test_valuevalue1 = TestClass(100)print(value1.sum_number())  # 5050print(value1.test())  # 10100

(3)自有方法:自有方法是定义在类名空间中的普通函数,语法格式如下:

class ClassName:    def <方法名>(<参数列表>):        ...

.<方法名>(<参数列表>)的方式使用,<类名>表示命名空间。自有方法不需要selfcls这类参数,可以没有参数。自有方法只能操作类属性和类方法,不能操作实例属性和实例方法。自由方法的使用只能使用<类名>

严格的说自由方法不是一个方法,只是一个定义在类中的函数

实例代码

class TestClass:    sum_num = 0    def __init__(self, number):        self.number = number    def sum_number(self):        for i in range(self.number + 1):  # 因为循环不会到最后一个数字            TestClass.sum_num += i        return TestClass.sum_num    def test():  # 自由方法        test_value = TestClass.sum_num * 2        return test_valuedef test_out():  # 等于上面的那个自由方法    test_out_value = TestClass.sum_num * 2    return test_out_valuevalue = TestClass(100)print(value.sum_number())  # 5050print(TestClass.test())  # 10100print(test_out())  # 10100

定义来类中的自由方法也可以定义到外面

(4)静态方法:定义在类中的普通函数,能够被所有实例对象共享

class ClassName:    @staticmethod    def <方法名>(<参数列表>):        ...

.<方法名>(<参数列表>)或者<类名>.<方法名>(<参数列表>)的方式使用静态方法也可以没有参数,可以理解为可以使用对象名调用的自有方法。 @staticmethod是装饰器,静态方法定义所必需的,静态方法同自由方法一样,只能操作类属性和类方法,不能操作实例属性和实例方法,不同的是可以通过<类名>或<对象名>。

示例代码

class TestClass:    sum_num = 0    def __init__(self, number):        self.number = number    def sum_number(self):        for i in range(self.number + 1):  # 因为循环不会到最后一个数字            TestClass.sum_num += i        return TestClass.sum_num    @staticmethod  # 静态方法装饰器    def test():        test_value = TestClass.sum_num * 2        return test_valuevalue = TestClass(100)print(value.sum_number())  # 5050print(TestClass.test())  # 10100print(value.test())  # 10100

(5)保留方法:有双下划线喀什和结束的方法,保留使用。语法结构↓

class ClassName:    def <保留方法名>(<参数列表>):        ...

保留方法一般都对应类的某种操作,在使用操作符的时候调用是Python解释器中保留的方法

感谢各位的阅读,以上就是“Python面向对象编程之怎么理解类的概念”的内容了,经过本文的学习后,相信大家对Python面向对象编程之怎么理解类的概念这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯