类属性相关操作

本贴最后更新于 987 天前,其中的信息可能已经事过景迁

前言:很多同学在学习类和对象的时候,对类属性一直不理解,内部访问外部访问就给绕晕了,属性的修改更是云里雾里,今天我们就来讲一下,希望这篇博客对大家有帮助。

一、类属性的定义

  1. 定义在类中且在方法外的变量,称之为类属性。
    class TestDemo:
            # 此处的name这个变量就叫类属性
    	name = "老王"
    

二、类属性的访问

  1. 类属性的访问分为:类内部访问、类外部访问
  2. 类内部访问
    class TestDemo:
        # 此处的name这个变量就叫类属性
        name = "老王"
    
        def test_01(self):
            # 在类内部对类属性进行访问
            print(self.name)
    
    if __name__ == '__main__':
        cl = TestDemo() # 类实例化
        cl.test_01() # 调用test_01方法
    输出
    老王
    
  3. 类外部访问
    class TestDemo:
        # 此处的name这个变量就叫类属性
        name = "老王"
    
    if __name__ == '__main__':
        cl = TestDemo() # 类实例化
        result = cl.name  # 通过类实例访问类属性
        print("类实例访问类属性 =",result)
    
        result2=TestDemo.name # 通过类访问类属性
        print("类访问类属性 =", result2)
    输出
    类实例访问类属性 = 老王
    类访问类属性 = 老王
    

三、类属性的修改

  1. 类属性为不可变类型
    class Dog:
        # 类属性
        dog_name = "大黄"
        print("原来dog_name内存地址:",id(dog_name))
    
    if __name__ == '__main__':
        print("修改前类属性:",Dog.dog_name)
        Dog.dog_name='小黑'
        print("修改后dog_name内存地址:",id(Dog.dog_name))
        print("修改后类属性:",Dog.dog_name)
    
    输出
    原来dog_name内存地址 4493585640
    修改前类属性 大黄
    修改后dog_name内存地址 4494022064
    修改后类属性 小黑
    
    结论当类属性为不可变类型时对类属性进行修改实际上只是改变了类属性的引用地址并未对齐进行修改
    
  2. 类属性为可变类型
    class Dog:
        # 类属性
        dog_name = ["大黄"]
        print("原来dog_name内存地址:",id(dog_name))
    
    if __name__ == '__main__':
        print("修改前类属性:",Dog.dog_name)
        Dog.dog_name.append('小黑')
        print("修改后dog_name内存地址:",id(Dog.dog_name))
        print("修改后类属性:",Dog.dog_name)
    
    输出
    原来dog_name内存地址 4550404680
    修改前类属性 ['大黄']
    修改后dog_name内存地址 4550404680
    修改后类属性 ['大黄', '小黑']
    
    结论当类属性为可变类型时可以对类属性进行修改
    
4 回帖
请输入回帖内容 ...