实例属性相关操作

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

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

一、实例属性的定义

  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属性= 老张 结论:类实例可以访问(类属性、实例属性),当类属性和实例属性同时存在的情况下(变量名相同),实例属性的优先级高于类属性
3 回帖
请输入回帖内容 ...
  • csa1002259

    写的很详细啊,看的懂,感谢,海励老师?

  • 其他回帖
  • xq

    整明白

  • luckyseven7 via iPhone

    感谢老师的分享