日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python隐藏属性

發布時間:2025/3/20 python 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python隐藏属性 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

小編在最初使用上Python之后,就一發不可收拾,人生苦短、我用Python,不光是因為其優雅簡潔,更是因為它強大的擴展性,特別是一些Python內置的私有屬性,熟練地掌握之后使得在開發過程中更靈活、更高效,今天小編就細數一些常用的私有屬性,希望能夠幫助到新手朋友們。

Python的隱藏屬性無處不在,內置的私有屬性往往是雙下劃線開頭,雙下劃線結尾,這里我們從模塊到對象,由上往下的來列舉常用的屬性用法。

模塊屬性

1、__ name__

當python文件被直接運行時,__ name__的值為__main__,而當python文件以模塊的形式被導入時,__name__的值為模塊名

def say_hello():print helloif __name__ == __main__:say_hello()

上面的代碼是最為常見的__name__的使用方式,當文件中有上述代碼后,直接運行腳本則會執行say_hello方法,通過import形式導入腳本文件時則不會執行say_hello。

2、__ file__

在python模塊中使用__file__來獲取腳本所在的路徑,但得到的是相對路徑,若希望得到絕對路徑可使用os.path.realpath(__ file__)

3、__ all__

__all__指定的是當包被import * 的時候, 哪些模塊會被import進來

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' #test1.py import os, sys __all__ = [os]#test2.py from test1 import * sys.path ImportError: No module named sys

上述代碼可以看出,本來導入test1模塊時,os、sys也會被一并導入進來,但是__all__屬性限定了只導入os,所以sys并沒有被導入進來。

4、__ path__

__ path__指定了包的搜索路徑,默認情況下只有一個元素, 就是當前包的路徑, 修改__path__, 可以修改此包內的搜索路徑,修改該屬性類似于修改sys.path

類、實例屬性

1、__ class__

__class__屬于實例的屬性,直接指向該實例的類對象

class A(object):passa = A()

a.__class__等同于A

2、__ dict__
對象的屬性字典,key為屬性名,value為該屬性的值

注:__dict__若被實例對象引用則列出實例對象的屬性,若被類引用則列出類屬性

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' class A(): def __init__(self): self.x=1 #定義一個實例屬性 y = 2 #定義一個類屬性 a = A() a.__dict__ {'x': 1} A.__dict__ {'__doc__': None,'__init__': function __main__.__init__'__module__': '__main__','y': 2}

上述代碼可以看出,實例對象a的__dict__屬性只包含實例屬性x,而類A的__dict__屬性則包含了所有類屬性

3、__ slots__

__slots__限制了類中只能定義某些屬性

class Test(object):__slots__ = ['a']test = Test() test.a = 1 test.b = 1 AttributeError: 'Test' object has no attribute 'b'

__slots__限定了屬性集只能包含’a’,所以在定義屬性’b’時報出錯誤。

4、__ new__、__ init__

繼承自object的新式類才有__new__

__ new__在實例被創建時調用,__init__在實例創建后的初始化時調用,所以先調用__new __ ,然后調用__init __

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' class A(object): def __init__(self):print initdef __new__(cls,*args, **kwargs):print new %s%clsreturn object.__new__(cls, *args, **kwargs)A()# 輸出 new class '__main__.A' init

__new__方法必須返回一個實例對象

5、__ del__

相當于類的析構函數,當類對象被銷毀前調用

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:857662006 尋找有志同道合的小伙伴, 互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' class MyClass(object):def __del__(self):print hehea = MyClass() del a hehe

6、操作符類屬性

  • __ str__:str()或print時調用

  • __ len__:len()時調用

  • __ cmp__:cmp()時調用

  • __ lt__,__ gt__,__ eq__:,=時被調用

  • __ add__,__ sub__,__ mul__,__ div__:+、-、*、/時被調用

  • __ getitem__,__ setitem__,__ delitem__:列表引用、設置、刪除時被調用

這些操作符類屬性是Python類的內置類方法,往往當需要重載操作符時重載相應的類方法即可。

7、自定義私有屬性

在定義類屬性時,若在該屬性前加上__,則該屬性被定義為私有屬性,即該屬性不可被外部直接引用,只能在類的內部使用

class A(object):def __init__(self):self.__a = 1def func(self):print self.__aa = A() a.func() #輸出 1 a.__a #輸出 AttributeError: 'A' object has no attribute '__a'

然而Python對__a這個屬性做了什么呢?實際上該屬性并不是不存在的,當在某個屬性前加上兩個下劃線后,python自動將其所在的類名追加在屬性前導致其擁有了新的屬性名,也由此實現了該屬性不可引用的假象

class A(object):def __init__(self):self.__a = 1def func(self):print self.__aa = A() a._A__a #輸出 1

總結

以上是生活随笔為你收集整理的Python隐藏属性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。