python 面向对象(进阶篇)
admin
2023-07-31 00:37:21
0

上一篇《Python 面向对象(初级篇)》文章介绍了面向对象基本知识:

  • 面向对象是一种编程方式,此编程方式的实现是基于对  和 对象 的使用
  • 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中)
  • 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数
  • 面向对象三大特性:封装、继承和多态

本篇将详细介绍Python 类的成员、成员修饰符、类的特殊成员。

类的成员

类的成员可以分为三大类:字段、方法和属性

ptyhonoo1

注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段。而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份。

一、字段

字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同,

  • 普通字段属于对象
  • 静态字段属于

12345678910111213141516 class Province:     # 静态字段    country \’中国\’     def __init__(self, name):         # 普通字段        self.name = name # 直接访问普通字段obj = Province(\’河北省\’)print obj.name # 直接访问静态字段Province.country

字段的定义和使用

由上述代码可以看出【普通字段需要通过对象来访问】【静态字段通过类访问】,在使用上可以看出普通字段和静态字段的归属是不同的。其在内容的存储方式类似如下图:

ptyhonoo2

由上图可是:

  • 静态字段在内存中只保存一份
  • 普通字段在每个对象中都要保存一份

应用场景: 通过类创建对象时,如果每个对象都具有相同的字段,那么就使用静态字段

二、方法

方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。

  • 普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self
  • 类方法:由调用; 至少一个cls参数;执行类方法时,自动将调用该方法的复制给cls
  • 静态方法:由调用;无默认参数;

1234567891011121314151617181920212223242526272829303132 class Foo:     def __init__(self, name):        self.name = name     def ord_func(self):        \”\”\” 定义普通方法,至少有一个self参数 \”\”\”         # print self.name        print \’普通方法\’     @classmethod    def class_func(cls):        \”\”\” 定义类方法,至少有一个cls参数 \”\”\”         print \’类方法\’     @staticmethod    def static_func():        \”\”\” 定义静态方法 ,无默认参数\”\”\”         print \’静态方法\’ # 调用普通方法f = Foo()f.ord_func() # 调用类方法Foo.class_func() # 调用静态方法Foo.static_func()

方法的定义和使用

ptyhonoo3

相同点:对于所有的方法而言,均属于类(非对象)中,所以,在内存中也只保存一份。

不同点:方法调用者不同、调用方法时自动传入的参数不同。

三、属性  

如果你已经了解Python类中的方法,那么属性就非常简单了,因为Python中的属性其实是普通方法的变种。

对于属性,有以下三个知识点:

  • 属性的基本使用
  • 属性的两种定义方式

1、属性的基本使用

123456789101112131415 # ############### 定义 ###############class Foo:     def func(self):        pass     # 定义属性    @property    def prop(self):        pass# ############### 调用 ###############foo_obj = Foo() foo_obj.func()foo_obj.prop   #调用属性

属性的定义和使用

ptyhonoo4

由属性的定义和调用要注意一下几点:

  • 定义时,在普通方法的基础上添加 @property 装饰器;
  • 定义时,属性仅有一个self参数
  • 调用时,无需括号
    方法:foo_obj.func()
    属性:foo_obj.prop

注意:属性存在意义是:访问属性时可以制造出和访问字段完全相同的假象

属性由方法变种而来,如果Python中没有属性,方法完全可以代替其功能。

实例:对于主机列表页面,每次请求不可能把数据库中的所有内容都显示到页面上,而是通过分页的功能局部显示,所以在向数据库中请求数据时就要显示的指定获取从第m条到第n条的所有数据(即:limit m,n),这个分页的功能包括:

  • 根据用户请求的当前页和总数据条数计算出 m 和 n
  • 根据m 和 n 去数据库中请求数据

123456789101112131415161718192021e=\”crayon-5812b3550e5b5576624422-17\”>1718192021ت“函数”供使用(可以讲多函数中公用的变量封装到对象中)

  • 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数
  • 面向对象三大特性:封装、继承和多态
  • 本篇将详细介绍Python 类的成员、成员修饰符、类的特殊成员。

    类的成员

    类的成员可以分为三大类:字段、方法和属性

    ptyhonoo1

    注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段。而其他的成员,则都是保存在类中,即:无论对象的多少,在内存中只创建一份。

    一、字段

    字段包括:普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同,

    • 普通字段属于对象
    • 静态字段属于

    12345678910111213141516 class Province:     # 静态字段    country \’中国\’     def __init__(self, name):         # 普通字段        self.name = name # 直接访问普通字段obj = Province(\’河北省\’)print obj.name # 直接访问静态字段Province.country

    字段的定义和使用

    由上述代码可以看出【普通字段需要通过对象来访问】【静态字段通过类访问】,在使用上可以看出普通字段和静态字段的归属是不同的。其在内容的存储方式类似如下图:

    ptyhonoo2

    由上图可是:

    • 静态字段在内存中只保存一份
    • 普通字段在每个对象中都要保存一份

    应用场景: 通过类创建对象时,如果每个对象都具有相同的字段,那么就使用静态字段

    二、方法

    方法包括:普通方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。

    • 普通方法:由对象调用;至少一个self参数;执行普通方法时,自动将调用该方法的对象赋值给self
    • 类方法:由调用; 至少一个cls参数;执行类方法时,自动将调用该方法的复制给cls
    • 静态方法:由调用;无默认参数;

    1234567891011121314151617181920212223242526272829303132 class Foo:     def __init__(self, name):        self.name = name     def ord_func(self):        \”\”\” 定义普通方法,至少有一个self参数 \”\”\”         # print self.name        print \’普通方法\’     @classmethod    def class_func(cls):        \”\”\” 定义类方法,至少有一个cls参数 \”\”\”         print \’类方法\’     @staticmethod    def static_func():        \”\”\” 定义静态方法 ,无默认参数\”\”\”         print \’静态方法\’ # 调用普通方法f = Foo()f.ord_func() # 调用类方法Foo.class_func() # 调用静态方法Foo.static_func()

    方法的定义和使用

    ptyhonoo3

    相同点:对于所有的方法而言,均属于类(非对象)中,所以,在内存中也只保存一份。

    不同点:方法调用者不同、调用方法时自动传入的参数不同。

    三、属性  

    如果你已经了解Python类中的方法,那么属性就非常简单了,因为Python中的属性其实是普通方法的变种。

    对于属性,有以下三个知识点:

    • 属性的基本使用
    • 属性的两种定义方式

    1、属性的基本使用

    123456789101112131415 # ############### 定义 ###############class Foo:     def func(self):        pass     # 定义属性    @property    def prop(self):        pass# ############### 调用 ###############foo_obj = Foo() foo_obj.func()foo_obj.prop   #调用属性

    属性的定义和使用

    ptyhonoo4

    由属性的定义和调用要注意一下几点:

    • 定义时,在普通方法的基础上添加 @property 装饰器;
    • 定义时,属性仅有一个self参数
    • 调用时,无需括号
      方法:foo_obj.func()
      属性:foo_obj.prop

    注意:属性存在意义是:访问属性时可以制造出和访问字段完全相同的假象

    属性由方法变种而来,如果Python中没有属性,方法完全可以代替其功能。

    实例:对于主机列表页面,每次请求不可能把数据库中的所有内容都显示到页面上,而是通过分页的功能局部显示,所以在向数据库中请求数据时就要显示的指定获取从第m条到第n条的所有数据(即:limit m,n),这个分页的功能包括:

    • 根据用户请求的当前页和总数据条数计算出 m 和 n
    • 根据m 和 n 去数据库中请求数据

    1234

    相关内容

    热门资讯

    Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
    定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
    500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
    scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
    65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
    小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
    pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
    微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
    Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
    python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...