如何解决Python属性中的属性和私有属性的区别?
class test: #1
def __init__(self): #2
self.abc = 123 #3
@property #4
def abc(self): #5
return self._abc #6
@abc.setter #7
def abc(self,value): #8
self._abc = value #9
@abc.deleter #10
def abc(self): #11
del self._abc #12
obj = test() #13
obj.abc = 456 #14
print(obj.abc) #15
class test: #1
def __init__(self): #2
self._abc = 123 #3
@property #4
def abc(self): #5
return self._abc #6
@abc.setter #7
def abc(self,value): #8
self._abc = value #9
@abc.deleter #10
def abc(self): #11
del self._abc #12
obj = test() #13
obj.abc = 456 #14
print(obj.abc) #15
init方法中的self._abc和self.abc有什么区别?
这两个程序的输出可能相同,但代码行为不同。
第一个程序运行:13-2-3-7-9-3-14-7-9-15-4-6
第二个程序运行:13-2-3-14-7-9-15-4-6
为什么?
解决方法
不是最有经验的编码人员,但据我所知,Python 没有明确的公共或私有属性,所有的类变量/方法都可以随时访问。
self._abc 中的下划线更像是“开发者的不成文规则”,下划线用于使属性“私有”-技术上不是,但其他开发人员会看到它并将其视为私有的。其他 self.abc() 函数是该“私有”变量的公共 getter/setter/deleter。
再说一次,这不是由 Python 定义的,因此有人可以轻松调用 self._abc 并修改它,它会编译并运行 - 但这样做是不好的做法。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。