时间:2021-05-22
理论
1、访问权限(private、public)与继承方式(只有public继承)
在面向对象编程语言中,类的属性与方法都会设置访问控制权限,从而满足我们的设计需求。一般而言,我们通常会将对象的属性设置为私有的(private)或受保护的(protected),简单的说就是不允许外界访问,而对象的方法通常都是公开的(public),因为公开的方法就是对象向外界提供的接口。 在Python中,属性和方法的访问权限只有两种,也就是公开的和私有的,如果希望属性是私有的,在给属性命名时可以用 两个下划线作 为开头, 下面的代码可以验证这一点。
class Test: def __init__(self, foo): self.__foo = foo # 私有属性 # 定义私有函数,外界不可以直接访问,但是可以通过【_类名__函数名】去调用私有函数 def __bar(self): print(self.__foo) print('__bar')def main(): """ test = Test('hello') # AttributeError: 'Test' object has no attribute '__bar' test.__bar() # AttributeError: 'Test' object has no attribute '__foo' print(test.__foo) """ # 使用以下这种方式就可以在类的外部调用类的私有属性与方法 test._Test__bar() print(test._Test__foo)if __name__ == "__main__": main()在实际开发中,我们并不建议将属性设置为私有的,因为这会导致子类无法访问。所以大多数Python程序员会 遵循一种命名惯例,就是让属性名以 单下划线 开头来表示属性是受保护的 ,本类之外的代码在访问这样的属性时应该要保持慎重。这种做法并不是语法上的规则,单下划线开头的属性和方法外界仍然是可以访问的,所以更多的时候它是一种暗示或隐喻,让调用者知道这是不应该直接访问的属性或方法,而且这样做并不影响子类去继承这些东西。
2、__xx__() 的使用
案例:定义一个类描述数字时钟
import timeclass Clock(object): """数字时钟""" def __init__(self, hour=0, minute=0, second=0): """初始化方法 :param hour: 时 :param minute: 分 :param second: 秒 """ self._hour = hour self._minute = minute self._second = second def run(self): """走字""" self._second += 1 if self._second == 60: self._second = 0 self._minute += 1 if self._minute == 60: self._minute = 0 self._hour += 1 if self._hour == 24: self._hour = 0 def __str__(self): """显示时间""" return '%02d:%02d:%02d' %(self._hour, self._minute, self._second)def main(): clock = Clock(23, 59, 58) while True: print(clock) time.sleep(1) clock.run()if __name__ == '__main__': main()注意:Python类中的那些魔法方法,如__str__、__repr__等,这些方法并不是私有成员哦,虽然它们以双下划线开头,但是他们也是以双下划线结尾的,这种命名并不是私有成员的命名,
到此这篇关于python中 _、__、__xx__()区别及使用场景的文章就介绍到这了,更多相关python _、__、__xx__() 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文研究的主要是Java编程中ArrayList和LinkedList区别及使用场景的相关内容,具体介绍如下。1、ArrayList是基于数组实现的,其构造函数
本文实例讲述了Python面向对象之私有属性和私有方法。分享给大家供大家参考,具体如下:01.应用场景及定义方式应用场景在实际开发中,对象的某些属性或方法可能只
本文实例讲述了JavaScript模板引擎应用场景及实现原理。分享给大家供大家参考,具体如下:一、应用场景以下应用场景可以使用模板引擎:1、如果你有动态ajax
每次使用python获取查询结果的时候,都会纠结一段时间到底用fetchone和fetchall,用不好容易报错,关键在于没有搞清楚它们之间的区别和使用场景。f
Python四种逐行读取文件内容的方法下面四种Python逐行读取文件内容的方法,分析了各种方法的优缺点及应用场景,以下代码在python3中测试通过,pyth