Python类结构

类的结构

实例

面向对象开发, 第一件事就是创建class

再用ClassName创建对象

  • 先在内存中给新对象生成空间
  • __init__初始化对象属性

完成后, 内存中就有了对象的—实例

创建对象 就是类的 实例化

程序执行时:

  • 程序会保存每个实例的属性在不同的内存空间
  • 每次调用方法时, 会从类中调取方法, 从实例调取属性

所以: 每个对象都有独立的内存空间保存属性, 方法只在类中保存, 调用时会引用实例(self)的属性

类属性和类方法

在python中, 一切皆对象, 所以, 未经实例化的类class, 也是一个对象—类对象

所以除了创建的实例的属性和方法以外, 类对象也有自己的类属性 类方法, 类对象在程序中只有一份

通过类名.的方式, 可以让其生成的实例去访问其类属性和方法

  • 类属性和类方法可对其创建的所有实例共享

类属性

类属性就是给类对象定义的属性, 通常用于记录与整个类有关的特征, 通常不会用于记录某具体事务的特征(因为这并不对应其功能)

  • 定义并调用一个类属性:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class A_Class(object):

    a_class_attribute = 0 # 直接在类定义下方对一个变量进行赋值

    pass

    item = A_Class()

    # 访问类属性
    print(A_Class.a_class_attribute) # 推荐以类名形式访问
    print(item.a_class_attribute) # 不推荐, 但是可用

用实例名也可以调用类属性的原因: 属性向上查找机制, 就正像实例属性和方法的查找关系一样, 属性可以先在实例中搜索相关, 如果失败, 就在类中查找相关

但如果利用实例名.属性 = 值的方式赋值, 并不会更改类属性, 只会对实例属性进行更改

类方法

类方法就是针对类对象的方法, 其权限跟方法权限相同, 可以访问其他类方法和类属性(无法访问实例)

  • 定义类方法

    1
    2
    3
    @classmethod
    def method_name(cls): # cls是class的简写, 也可以使用其他名称
    pass

利用修饰器@classmethod声明下方定义一个类方法

静态方法

一种特殊的方法: 当一个类方法即不用访问类方法类属性也不用访问实例方法实例属性时使用解释器@staticmethod表示下方是静态方法

1
2
3
@staticmethod
def a_method(): # 无需传递参数
pass

静态方法通常用来显示帮助信息, 或者一些固定的操作

  • Copyrights © 2024 Cdog Shen
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信