AI大模型教程
一起来学习

python 面向对象第一位元素:类属性

类属性,直接定义

类属性的用途:

  1. 共享数据:类属性用于存储所有成员共享的信息,例配置参数或全局设置
  2. 节省内存:每个成员无需重复存储相同的数据
  3. 常量定义:适合定义类的常量,避免在每个成员中重复定义。
  4. 类属性可以用于记录类的状态或统计信息。 例如:count=0
  5. 类方法和静态方法的操作对象:类属性与类方法或静态方法结合使用,用于操作类级别的数据;

与实例属性的区别

        类属性:定义在类内部,但在方法外部,所有实例共享。

        成员属性:通过self在方法内部定义,每个实例独立拥有

                def __init__(self,name(形参)): 初始化

                        self.name=name

类属性可调用:

注意:

               1.类属性在类定义阶段就会被执行,因此如果引用的时尚未定义的内容(如后面才定义的类或属性),会导致错误。

               2.类属性无法直接访问成员属性(因为成员属性依赖具体成员存在),必须通过成员对象才能接访问。

 可调用:

  1. 调用自身其它类属性
    class MyClass:
        a = 10
        b = a * 2  # 调用类属性a
    
    print(MyClass.b)  # 输出:20
  2. 可通过类方法或静态方法,间接调用其它函数或处理逻辑
    class MyClass:
        @staticmethod
        def calculate(x):
            return x * 3
    
        # 类属性调用静态方法
        c = calculate(5)
    
    print(MyClass.c)  # 输出:15
  3. 调用其它类的类属性,通过类名.类属性的方法。

类属性被调用:

一、内部调用(类内部的方法中:成员方法、类方法、静态方法、【成员属性】)

  1. 成员方法中的调用:成员方法通过self访问类属性(本质时通过成员找类属性),或直接用 类名.类属性(更推荐,明确是类属性)
  2. 类方法中调用:类方法用@classmetod装饰,第一个参数是cls(代表类本身),需通过cls.类属性或类名.类属性调用
  3. 静态方法中调用:静态方法无默认值(即无self也无cls),必须直接用类名.类属性调用。
  4. **特殊调用:成员属性调用:因为类属性是所有成员共享的属性,本身就有,所以不需要调用,本身不能直接调用类属性,但在初始化成员属性的过程中(在__self__方法里),可以通过类名.类属性或self.类属性引用类属性,并将其用于成员属性的赋值或计算。

注意:

        1.成员属性是每个成员独有的,而类属性是所有成员共享的。上述操作是用类属性的值初始化成员属性,并非修改实例属性“调用”类属性(成员属性本身是值,没有调用能力);

         2. 如果后续修改了类属性,已创建的成员属性不会受影响(因为成员属性的值在初始化时已确定)。

class MyClass:
    class_attr = 10

    def __init__(self):
        self.instance_attr = MyClass.class_attr

obj = MyClass()
print(obj.instance_attr)  # 输出:10

# 修改类属性
MyClass.class_attr = 20
print(obj.instance_attr)  # 仍输出:10(实例属性值未变)
obj = MyClass()
print(obj.instance_attr)  # 输出:20
  • 二、外部调用(类外部的代码中)

在类定义之外的代码中调用类属性,有两种方法:

  1. 通过类名调用(最直接):无论是否创建成员,都可以用 类名.类属性 调用,这是最推荐的方式(清晰)
  2. 通过用户调用:创建类的成员后,用 成员名.类属性(本质是成员访问共享的类属性)

关键区别:

内部调用:依赖方法类型(成员方法用self或类名,类方法用cls或类名,静态方法只能用类名)

外部调用:直接用类名(无需成员)或通过成员(需先创成员),推荐用类名更清晰。

无论是内部还是外部,调用类属性的核心都是通过“类本身”或“类的实质”访问,本质是访问类级别的共享数据

类属性的修改:

通过类名修改(影响所有成员)

用类名.属性名=新值的方式修改,会直接修改类属性本身,所有成员(包括修改后创建的新成员)访问该属性时,都会得到新值

通过成员修改(仅影响当前成员,本质是新增用户属性)

如果用 成员名.类属性=新值的方式,不会真正修改类属性,而是给该成员新增了一个同名的成员属性,此后,该成员访问这个属性时,会优先使用自己的成员属性,而类属性和其它成员不受影响。

文章来源于互联网:python 面向对象第一位元素:类属性

相关推荐: 论文查重英语怎么说 ai写作

大家好,今天来聊聊论文查重英语怎么说 ai写作,希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧,可以借助此类工具: 论文查重英语怎么说 一、背景介绍 在学术领域,论文查重是确保学术诚信和论文质量的重要环节。随着国际化推进,英语…

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » python 面向对象第一位元素:类属性
分享到: 更多 (0)

AI大模型,我们的未来

小欢软考联系我们