首页 > 其他 > 详细

类的进阶

时间:2020-12-02 00:10:28      阅读:23      评论:0      收藏:0      [点我收藏+]

 

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

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

类的成员

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

字段: 静态字段,普通字段

方法:静态方法,类方法,实例方法

属性: 普通属性

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

一、字段

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

  • 普通字段属于对象
  • 静态字段属于
 1 class Province:
 2 
 3     # 静态字段
 4     country = 中国
 5 
 6     def __init__(self, name):
 7 
 8         # 普通字段
 9         self.name = name
10 
11 
12 # 直接访问普通字段
13 obj = Province(河北省)
14 print(obj.name)
15 
16 # 直接访问静态字段
17 print(Province.country)
18 字段的定义和使用

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

技术分享图片

 

 由上图可是:

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

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

 

二、方法

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

 

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

方法的定义和使用

 

技术分享图片

 

 

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

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

 

三、属性  

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

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

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

 

1、属性的基本使用

技术分享图片
 1 # ############### 定义 ###############
 2 class Foo:
 3 
 4     def func(self):
 5         pass
 6 
 7     # 定义属性
 8     @property
 9     def prop(self):
10         pass
11 # ############### 调用 ###############
12 foo_obj = Foo()
13 
14 foo_obj.func()
15 foo_obj.prop   #调用属性
16 
17 属性的定义和使用
View Code

 

技术分享图片

 

技术分享图片

 

类的进阶

原文:https://www.cnblogs.com/kxuan/p/14071510.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!