为了账号安全,请及时绑定邮箱和手机立即绑定

python中描述符概念的行为(令人困惑)

python中描述符概念的行为(令人困惑)

斯蒂芬大帝 2021-03-30 12:47:52
我了解python描述符,但是对此有些困惑。如果您具有以下类描述符class Descriptor(object):    def __get__(self, instance, owner):        print 'getting'        return self.value    def __set__(self, instance, value):        print 'setting'        self.value = value    def __delete__(self, instance):        print 'deleting'        del self.value我们要管理其属性的类是这样的。class Test(object):    name = Descriptor()    def __init__(self, name):        print 'init test'        self.name = name当我创建Test类的对象并执行某些操作时,它会给我这样的答案...t = Test('abc')init testsetting>>> t.namegetting 'abc'>>> del t.namedeleting>>> t<__main__.Test object at 0x013FCCD0>>>> t.namegetting 现在我想要一个类Test1像这样。class Test1(object):    def __init__(self, value):        print 'init test1'        self.name = Descriptor()        self. value = value如果我创建Test1的对象并尝试访问Test1实例的属性,则会得到类似以下的输出。t1 = Test1(12)t1.name>>> getting>>> 12>>> t1.name = 30>>> setting问1)我的问题是这个名称属性是否在Test1的init中声明,是否绑定到Test1的实例...因为当我尝试获取t1的属性字典时,它返回空dict ...t1.__dict__>>> {}与类Test的实例t相同 t.__dict__ >>> {}当我向这些实例中的任何一个添加新属性时,就像这样... t.some = 'some' >>> t1.some = 'some'再一次,如果我尝试访问属性字典,它只会给我刚才添加的属性..现在所有实例属性t.__dict__>>> {'some': 'some'}>>> t1.__dict__>>> {'some': 'some'}问题2)那么init中定义的实例属性(例如,类Descriptor和Test中的变量名称和值)与实例创建后定义的属性(例如变量t.some)之间有什么区别?问3)类Test与类Test1有何不同。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 226 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号