【Pyhont笔记】类的属性隐藏

class person(object):
    tall = 180
    hobbies = []
    def __init__(self,name):
        self.name = name

Bruce = person("Bruce")
person.tall
Out[8]: 180

Bruce.tall=190
person.tall
Out[9]: 180

del Bruce.tall
Bruce.tall
Out[10]: 180


Bruce.hobbies
Out[11]: []
person.hobbies
Out[12]: []
Bruce.hobbies.append("acc")

Bruce.hobbies
Out[14]: ['acc']
person.hobbies
Out[15]: ['acc']

Bruce.hobbies=[]
person.hobbies
Out[17]: ['acc']

Bruce.hobbies.append('bbb')
Bruce.hobbies
Out[19]: ['bbb']

person.hobbies
Out[20]: ['acc']

对于不可变类型的类属性,隐藏属性可以总结为:

  • 对于不可变类型的类属性person.tall,可以通过实例Bruce进行访问,并且"person.tall is Bruce.tall"

  • 当通过实例赋值/修改tall属性的时候将为实例Bruce新建一个tall实例属性,这时,“person.tall is not Bruce.tall”

  • 当通过"del Bruce.tall"语句删除实例的tall属性后,再次成为"person.tall is Bruce.tall"

对于可变类型的类属性,隐藏属性可以总结为:

  • 同样对于可变类型的类属性person.hobbies,可以通过实例Bruce进行访问,并且"person.hobbies is
    Bruce. hobbies"
  • 当通过实例赋值hobbies 属性的时候,都将为实例Bruce新建一个hobbies实例属性,这时,“person.hobbies is not
    Bruce. hobbies”
  • 当通过"del Bruce. hobbies"语句删除实例的hobbies属性后,再次成为"person. hobbies is Bruce.
    hobbies"
  • 当"person. hobbies is Bruce.hobbies"时,通过实例修改hobbies属性的时候,将修改Bruce. hobbies指向的内存地址(即person.hobbies),此时,“person.hobbies is not Bruce. hobbies”

注意,虽然通过实例可以访问类属性,但是,不建议这么做,最好还是通过类名来访问类属性,从而避免属性隐藏带来的不必要麻烦

重点:一旦通过实例对类属性进行了赋值,则实例会创建一个新的属性,再del该实例属性前,实例都指向这个新建属性。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值