电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python中 _、__、__xx__()區別及使用場景

瀏覽:82日期:2022-07-19 11:11:12

理論

Python中不存在真正的私有方法。為了實現類似于c++中私有方法,可以在類的方法或屬性前加一個“_”單下劃線,意味著該方法或屬性不應該去調用,它并不屬于API。但是,這只是一個形式上的約定,python并不阻止調用。 __雙下劃線的作用是避免覆蓋其內容,實現的機制是在帶有雙下劃線的方法或屬性前加上_類名的標識。由于,python自動對方法和屬性進行了改寫,所以直接調用帶有雙下劃線的方法是調用不到的。 “xx”經常是操作符或本地函數調用的magic methods。在上面的例子中,提供了一種重寫類的操作符的功能。它是用于Python調用的。

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__() 的使用

在python中,方法名如果是__xx__()的話,那么就有特殊的功能,因此叫做“魔法”方法; 當使用print輸出對象的時候,只要自己定義了__str__(self)方法,那么就會打印從在這個方法中return的數據; __str__()方法需要返回一個字符串,當做這個對象的描寫。

案例:定義一個類描述數字時鐘

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__() 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 东莞工作服_东莞工作服定制_工衣订做_东莞厂服 | POS机办理_个人pos机免费领取-银联pos机申请首页 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | hc22_hc22价格_hc22哈氏合金—东锜特殊钢 | 油罐车_加油机_加油卷盘_加油机卷盘_罐车人孔盖_各类球阀_海底阀等车用配件厂家-湖北华特专用设备有限公司 | 电位器_轻触开关_USB连接器_广东精密龙电子科技有限公司 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 石英砂矿石色选机_履带辣椒色选机_X光异物检测机-合肥幼狮光电科技 | 手持式浮游菌采样器-全排二级生物安全柜-浙江孚夏医疗科技有限公司 | 打包钢带,铁皮打包带,烤蓝打包带-高密市金和金属制品厂 | 河南彩印编织袋,郑州饲料编织袋定制,肥料编织袋加工厂-盛军塑业 河南凯邦机械制造有限公司 | 玻璃钢格栅盖板|玻璃钢盖板|玻璃钢格栅板|树篦子-长沙川皖玻璃钢制品有限公司 | 深圳高新投三江工业消防解决方案提供厂家_服务商_园区智慧消防_储能消防解决方案服务商_高新投三江 | C形臂_动态平板DR_动态平板胃肠机生产厂家制造商-普爱医疗 | 挤奶设备过滤纸,牛奶过滤纸,挤奶机过滤袋-济南蓝贝尔工贸有限公司 | 河南新乡德诚生产厂家主营震动筛,振动筛设备,筛机,塑料震动筛选机 | 淄博不锈钢无缝管,淄博不锈钢管-鑫门物资有限公司 | 凝胶成像仪,化学发光凝胶成像系统,凝胶成像分析系统-上海培清科技有限公司 | 臭氧发生器_臭氧消毒机 - 【同林品牌 实力厂家】 | 橡胶弹簧|复合弹簧|橡胶球|振动筛配件-新乡市永鑫橡胶厂 | 壹车网 | 第一时间提供新车_资讯_报价_图片_排行! | 震动筛选机|震动分筛机|筛粉机|振筛机|振荡筛-振动筛分设备专业生产厂家高服机械 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 蓄电池在线监测系统|SF6在线监控泄露报警系统-武汉中电通电力设备有限公司 | 我车网|我关心的汽车资讯_汽车图片_汽车生活! | 吹塑加工_大型吹塑加工_滚塑代加工-莱力奇吹塑加工有限公司 | 科研ELISA试剂盒,酶联免疫检测试剂盒,昆虫_植物ELISA酶免试剂盒-上海仁捷生物科技有限公司 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 卫生型双针压力表-高温防腐差压表-安徽康泰电气有限公司 | 宝宝药浴-产后药浴-药浴加盟-艾裕-专注母婴调养泡浴 | 丙烷/液氧/液氮气化器,丙烷/液氧/液氮汽化器-无锡舍勒能源科技有限公司 | 非标压力容器_碳钢储罐_不锈钢_搪玻璃反应釜厂家-山东首丰智能环保装备有限公司 | 广州活动策划公司-15+年专业大型公关活动策划执行管理经验-睿阳广告 | 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 多功能干燥机,过滤洗涤干燥三合一设备-无锡市张华医药设备有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | 经济师考试_2025中级经济师报名时间_报名入口_考试时间_华课网校经济师培训网站 | 乐考网-银行从业_基金从业资格考试_初级/中级会计报名时间_中级经济师 | 淋巴细胞分离液_口腔医疗器材-精欣华医疗器械(无锡)有限公司 | 耙式干燥机_真空耙式干燥机厂家-无锡鹏茂化工装备有限公司 |