面向对象之私有属性
在大多数面向对象编程语言中,属性可以设置为公开的或私有的,处于某种原因,我们可以将某些属性设置为是私有的,这样的属性是无法从外部获取的。(通常我们会把类的的方法设置为公开的而属性设置为私有的)此时我们就只需要把属性前面加上两个下划线即可。
比如:name
是公开属性而 __name
就是私有属性了。
但是在实际的开发过程中我们并不建议把属性设置为私有的,因为这样会导致我们的子类无法访问。
比如在我的单链表文章中,我将链表的头属性设置为了私有的 __head
这样就会导致我想构造双链表或环形链表时再使用 Single_link_list 的类时就会报错,大家感兴趣的话可以自己来试一下。
所以我们大多在实际开发中会遵循一种命名规则就是在属性下面加单下划线 _name
,这代表我的的这个属性是受保护的,但从外界仍然可以访问到,这是一种约定俗成的规则。
举一些例子
class test():
def __init__(self,name):
self.name=name
def pname():
print(test('Wind').name)
if __name__ == '__main__':
pname()
运行结果:
’‘
class test():
def __init__(self,name):
self.__name=name
def pname():
print(test('Wind').__name)
if __name__ == '__main__':
pname()
运行结果:
’‘
class test():
def __init__(self,name):
self._name=name
def pname():
print(test('Wind')._name)
if __name__ == '__main__':
pname()
运行结果:
’‘
面向对象之私有方法
私有方法与私有属性的用法类似,我们就不再赘述,直接举一些例子大家更容易理解。
举一些例子
class test():
def __init__(self):
self.name='Wind'
def pname(self):
print(self.name)
if __name__ == '__main__':
test().pname()
运行结果:
’‘
class test():
def __init__(self):
self.name='Wind'
def __pname(self):
print(self.name)
if __name__ == '__main__':
test().__pname()
运行结果:
’‘
class test():
def __init__(self):
self.name='Wind'
def _pname(self):
print(self.name)
if __name__ == '__main__':
test()._pname()
运行结果: