什么是面向对象-类的属性

首发于 微信公众号: 脾气猪
转摘需保留公众号和来源
文字有点长,对于不想看文字的朋友,可以去这里看视频,视频可能更好理解

https://www.piqizhu.com/v/D8V9Wpkd1Wr

本节课我们学习类的属性

知识点:类的属性,是可以被它的实例共享的

首先, 我们使用鸭类设计方案,来实例化几个对象

# 为了减少代码量,使用新的鸭类设计方案
class 鸭类设计方案:
    type_name = "鸭"
    def 吃东西(self):
        print("开始用嘴巴吃东西")
    def 跑(self):
        print(self.type_name, ":用2条 后肢 跑")
    def 叫(self):
        print("嘎嘎嘎")

a = 鸭类设计方案()
b = 鸭类设计方案()
c = 鸭类设计方案()

然后,让我们来打印下他们3个的type_name属性

print(a.type_name, b.type_name, c.type_name)
# 输出 
# 鸭 鸭 鸭

我们看到,他们都输出了 鸭,

是的,要访问一个对象的属性,格式是 对象名.属性

对象名 后面跟了一个 英文句号.

这里的点 . 你可以理解为

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

方便吧! 不要滥用哦!

本节课,主要讲了 类的属性 默认情况会被 这个类实例化的所有对象共享, 除非某个对象,自己对这个属性,进行了修改,否则,属性的值,会一直和类保持同步

那么, 这个特性有啥用呢? 下下节课 揭晓

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,096评论 6 13
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,830评论 2 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,135评论 1 32
  • 初识面向对象 楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战...
    go以恒阅读 945评论 0 6
  • 今天是阳光日记第一天。 在齐琳和叶惠贤老师的鼓励下终于完成了心愿的第一步。找到一个合适的地方开始写东西。无论好坏贵...
    衡润心怡阅读 245评论 0 1