pyhon基础:类属性和实例属性

实例属性:在实例对象中定义的属性
类属性(静态属性):
在类对象(也就是类)中定义的属性,并且多个实例对象之间共享一份类属性。
类属性的使用方式:
类名.类属性
也可以使用 对象名.类属性
注意
(1)、对于不可变数据类型来说: 对象名.静态属性名称=值 是给对象中添加属性名称,而不是进行修改。
(2).对于可变数据类型来说:
如果对象是修改可变数据类型变量中的数据,都有影响。
如果是从新给可变数据类型变量赋值,这是给该对象添加属性。

练习1:定义一个课程类定义一个language不可变数据类型变量,分别使用类对象和实例对象调用类属性。

在这里插入图片描述

练习2:分别使用类对象和实例对象修改类属性的值。
使用类对象修改类属性值
类对象改变类属性值:

class Course:
    language='Chinese'  #类属性或者静态属性
    def money(self):
        print('课程开始了')
print(Course.language,id(Course.language))    # Chinese
Course.language='python'   #类对象: 把类属性language的值改变了,改变之后重新开辟了内存空间,在调用此属性的时候内存地址会发生改变
print(Course.language)    
#  对象调用
#  使用对象来调用
python=Course()
print(python.language,id(python.language))      # python 
java=Course()
print(java.language,id(java.language))          #python 

运行结果:

Chinese 34656584
python 41734584
python 41734584

实例对象:

    class Course:
        language='Chinese'  #类属性或者静态属性
        def money(self):
            print('课程开始了')
    print(Course.language,id(Course.language))    # Chinese
    #  对象调用
    #  使用对象来调用
    python=Course()
    python.language='python'  #使用实例对象修改类属性的值,
    # 注意实际上是给python对象内部添加一个属性language,并不是修改静态类属性,与类属性无关,调用时调用的是自己的内部属性,不再是类属性。内存地址将发生变化。
    print(python.language,id(python.language))   # python 
    java=Course()
    print(java.language,id(java.language))          #Chinese

运行结果:

Chinese 31248824
python   35574032
Chinese 31248824

练习3:使用实例对象修改可变数据类型的元素值

对于可变数据类型来说:
如果对象是修改可变数据类型变量中的数据,都有影响。
如果是从新给可变数据类型变量赋值,这是给该对象添加属性。

class Course:
    language_lst=['python']
    def money(self):
        print('课程开始了')
print(Course.language_lst)   # ['python']
python=Course()
python.language_lst.append("java")    #使用实例对象python修改类对象language_lst的值,因为类对象是可变数据类型,修改之后将发生变化
# python.language_lst=['math','python']  # 赋值运算,自己内存中添加了一个language_lst变量,
print(python.language_lst)   # ['python', 'java']

java=Course()
print(java.language_lst)        # ['python', 'java']
print(Course.language_lst)   # ['python', 'java']

练习4:使用实例对象重新给类属性进行赋值

  class Course:
        language_lst=['python']
        def money(self):
            print('课程开始了')
    print(Course.language_lst)   # ['python']
    python=Course()
    # python.language_lst=['math','python']  # 赋值运算,自己内存中添加了一个language_lst变量,相当于给当前对象python添加属性,不会影响类对象的属性
    print(python.language_lst)   # ['math','python']
    java=Course()
    print(java.language_lst)        # ['python']
    print(Course.language_lst)   # ['python']

猜你喜欢

转载自blog.csdn.net/weixin_44239541/article/details/86483775
今日推荐