当我做一个类定义时,我总是去
Class A(object):
def __init__(self, arg):
self.arg = arg
def print_arg(self):
print(self.arg)
a = A('hello')
print a.arg
'hello'
但是我在第133行和第134行找到的 of https://github.com/Pylons/webob/blob/master/src/webob/request.py让我想我在甲级课上所做的有什么区别:
^{pr2}$b = B('goodbye')
print b.arg
'goodbye'
在没有查看}的直接访问可能是故意放在那里的,以避开该对象的正常attribute lookup hierarchy。在
request
中的代码的情况下,对对象{有几个主要含义:
使用
self.__dict__
添加属性会绕过__setattr__
,这可能会导致某些地方您可能希望避免的某些行为过载。在您可以看到没有为属性
b
打印任何内容。它在某些情况下不太灵活
你不能在类定义之外这样做。
总的目的是绕过Python设置变量的默认方式。此技术的一个特定用例是隐藏属性值。比较以下两个类:
这两个类都定义了一个只读属性
x
。但是,第一个属性最后有一个额外的_x
属性,该属性可由用户直接修改,而第二个属性则不能。虽然Python中没有什么是真正私有的,但是第二个类创建了一个更接近真实只读值的方法,并且它不会增加不必要的可见属性。在相关问题 更多 >
编程相关推荐