首发于 微信公众号: 脾气猪
转摘需保留公众号和来源
文字有点长,对于不想看文字的朋友,能够去这里看视频,视频可能更好理解
本节课咱们学习类的属性
微信
知识点:类的属性,是能够被它的实例共享的学习
首先, 咱们使用鸭类设计方案,来实例化几个对象设计
# 为了减小代码量,使用新的鸭类设计方案 class 鸭类设计方案: type_name = "鸭" def 吃东西(self): print("开始用嘴巴吃东西") def 跑(self): print(self.type_name, ":用2条 后肢 跑") def 叫(self): print("嘎嘎嘎") a = 鸭类设计方案() b = 鸭类设计方案() c = 鸭类设计方案()
而后,让咱们来打印下他们3个的type_name属性code
print(a.type_name, b.type_name, c.type_name) # 输出 # 鸭 鸭 鸭
咱们看到,他们都输出了 鸭,视频
是的,要访问一个对象的属性,格式是 对象名.属性
对象
对象名 后面跟了一个 英文句号.
继承
这里的点 .
你能够理解为 的
get
a.老婆 == a的老婆
意思是相等的同步
默认状况下,这3个对象,从类那里继承了type_name这个属性,因此,咱们打印出的是鸭
接着,咱们来修改下 type_name的值,而后打印修改后的值
鸭类设计方案.type_name = "www.piqizhu.com" # 修改成一个网址 print(a.type_name, b.type_name, c.type_name) # 输出 # www.piqizhu.com www.piqizhu.com www.piqizhu.com
咱们发现, a, b, c这3个对象的type_name值,也跟着变了
这说明,他们会共享 类的属性
接着,让咱们来修改下 对象a的type_name (注意,咱们这里是修改对象a,而不是修改类,要搞清楚类和对象的区别)
a.type_name = "微信公众号: 脾气猪" # 修改对象a的属性 print(a.type_name, b.type_name, c.type_name) # 输出 # 微信公众号: 脾气猪 www.piqizhu.com www.piqizhu.com
发现了没,a对象的type_name已经成功被咱们修改了
这说明,咱们能够单独的修改某个对象的属性
如今,咱们再来修改下 类的type_name
鸭类设计方案.type_name = "鸭子" # 修改成 鸭子 print(a.type_name, b.type_name, c.type_name) # 输出 # 微信公众号: 脾气猪 鸭子 鸭子
你们发现了吗? 此次咱们修改类的type_name属性,对象b和c被修改了, 而对象a,却没有被修改!
这说明什么? 说明对象a的type_name属性 已经不受控制了,能够摆脱类的控制了
那么对象a的type_name 是怎么拥有这种能力的呢?
由于上面咱们给a的type_name 单独进行了赋值,把它改为了微信公众号: 脾气猪
在对a的type_name完成修改后,a的type_name便有了自我意识,能够本身掌控本身,再也不受到类的控制了
如今让咱们把对象b和c的type_name也唤醒吧
b.type_name = "学Python" c.type_name = "到脾气猪" print(a.type_name, b.type_name, c.type_name) # 输出 # 微信公众号: 脾气猪 学Python 到脾气猪
接着,让咱们再来经过类,操做对象的属性试试?
鸭类设计方案.type_name = "鸭子" # 修改成 鸭子 print(a.type_name, b.type_name, c.type_name) # 输出 # 微信公众号: 脾气猪 学Python 到脾气猪
咦! 竟然没法经过类,操做对象的属性了,对象a, b, c的type_name属性果真不受到类的控制了
因为Python这门语言,是一个动态的,很宽松的语言,因此,咱们能够随时很方便的给类添加属性
咱们的鸭类设计方案,已经有了一个type_name属性,咱们给它增长一个age属性试试
鸭类设计方案.age=99 # 动态的 增长age属性 a.age = 100 # 让对象a拥有自主能力 print(鸭类设计方案.age, a.age, b.age, c.age) # 输出 # 99 100 99 99
方便吧! 不要滥用哦!
本节课,主要讲了 类的属性 默认状况会被 这个类实例化的全部对象共享, 除非某个对象,本身对这个属性,进行了修改,不然,属性的值,会一直和类保持同步
那么, 这个特性有啥用呢? 下下节课 揭晓