实例属性相关操作

发布于 更新于
本文目录
  1. 一、实例属性的定义
  2. 二、实例属性的访问
  3. 三、实例属性的修改
  4. 四、属性优先级

技术文章测试开发

前言:在学习类和对象的时候类属性和实例属性是绕不开的,上一篇文章讲了类属性,接下来我们就讲一下实例属性,希望这篇博客对大家有帮助。

前言:在学习类和对象的时候类属性和实例属性是绕不开的,上一篇文章讲了类属性,接下来我们就讲一下实例属性,希望这篇博客对大家有帮助。

一、实例属性的定义

  1. ##### 定义在类的初始化函数(def __init__())中的变量就叫实例属性

     class Dog:
         def __init__(self,age): #此处的age需要在类实例化的时候传进来
             self.name = "老王" #实例属性,写死的方式定义
             self.age = age    #实例属性,通过类初始化参数定义
    
     if __name__ == '__main__':
         cl = Dog(age=20) # 类实例化,并传递参数给初始化函数
    

二、实例属性的访问

  1. ##### 实例属性访问分为:类内部访问、类外部访问

  2. 类内部访问

     class Dog:
         def __init__(self,age):
             self.name = "老王"
             self.age = age
    
         def test_01(self):
             print(self.name) # 类内部访问实例属性
    
     if __name__ == '__main__':
         cl = Dog(age=20)
         cl.test_01()
     输出:
     老王
  3. 类外部访问

     class Dog:
         def __init__(self,age):
             self.name = "老王"
             self.age = age
    
     if __name__ == '__main__':
         cl = Dog(age=20)
         print(cl.name) # 类外部访问实例属性
     输出:
     老王
    

三、实例属性的修改

  1. ##### 实例属性为不可变类型

     class Dog:
         def __init__(self,age):
             self.name = "老王"
             self.age = age
    
     if __name__ == '__main__':
         cl = Dog(age=20)
         print("修改之前实例属性id = ",id(cl.name))
         print("修改之前实例属性 = ",cl.name)
         cl.name = "老张"
         print("修改后实例属性id = ",id(cl.name))
         print("修改后实例属性 = ",cl.name)
     输出:
     修改之前实例属性id =  4521110760
     修改之前实例属性 =  老王
     修改后实例属性id =  4521111024
     修改后实例属性 =  老张
    
     结论:当实例属性为不可变类型,对实例属性进行修改,实际上只是改变了实例属性的引用地址,并未对齐进行修改
  2. ##### 实例属性为可变类型

     class Dog:
         def __init__(self,age):
             self.name = ["老王"]
             self.age = age
    
     if __name__ == '__main__':
         cl = Dog(age=20)
         print("修改之前实例属性id = ",id(cl.name))
         print("修改之前实例属性 = ",cl.name)
         cl.name.append("老张")
         print("修改后实例属性id = ",id(cl.name))
         print("修改后实例属性 = ",cl.name)
     输出:
     修改之前实例属性id =  4362344712
     修改之前实例属性 =  ['老王']
     修改后实例属性id =  4362344712
     修改后实例属性 =  ['老王', '老张']
    
     结论:当实例属性为可变类型,可以进行修改

四、属性优先级

  1. ###### 当类属性与实例属性同时存在且同名的时候,去访问该属性

     class Dog:
         name = "老王"
         def __init__(self):
             self.name = "老张"
    
         def test_01(self):
             print("类内部访问name属性id=",id(self.name))
             print("类内部访问name属性=",self.name) #类内部访问name属性
    
     if __name__ == '__main__':
         cl = Dog()
         cl.test_01() #调用test_01方法,在类内部对实例属性进行访问
         print("类外部访问name属性id=",id(cl.name))
         print("类外部访问name属性=",cl.name)
     输出:
     类内部访问name属性id= 4388310512
     类内部访问name属性= 老张
     类外部访问name属性id= 4388310512
     类外部访问name属性= 老张
    
     结论:类实例可以访问(类属性、实例属性),当类属性和实例属性同时存在的情况下(变量名相同),实例属性的优先级高于类属性
    

来源:testingpai

继续阅读