Python的雙下劃方法

2022-09-18 03:03:35 字數 3768 閱讀 2805

算數運算子

一元運算子        __neg__ -、__pos__ +、__abs__

abs()

眾多比較運算子

__lt__

<、__le__

<=、__eq__ ==、__ne__ !=、__gt__ >、__ge__ >=算術運算子

__add__ +、__sub__ -、__mul__ *、__truediv__ /、__floordiv__ //、__ mod__ 、 __divmod__ divmod()、__pow__       ** 或 pow()、__round__

round()

反向算術運算子

__radd__、__rsub__、__rmul__、__rtruediv__、__rfloordiv__、__rmod__、 __rdivmod__、__rpow__

增量賦值算術運算子

__iadd__、__isub__、__imul__、__itruediv__、__ifloordiv__、__imod__、 __ipow__

位運算子

__invert__ ~、__lshift__

<<、__rshift__ >>、__and__ &、__or__ |、__ xor__ ^反向位運算子

__invert__ ~、__lshift__

<<、__rshift__ >>、__and__ &、__or__ |、__ xor__ ^增量賦值位運算子

__ilshift__、__irshift__、__iand__、__ixor__、__ior_

非算數運算子

字串 /位元組序列  

表示形式

__repr__、__str__、__format__、__bytes__

數值轉換

__abs__、__bool__、__complex__、__int__、__float__、__hash__、__index__

集合模擬

__len__、__getitem__、__setitem__、__delitem__、__contains__

迭代列舉

__iter__、__reversed__、__next__

可呼叫模擬

__call__

上下文管理

__enter__、__exit__

例項建立和銷毀

__new__、__init__、__del__

屬性管理

__getattr__、__getattribute__、__setattr__、__delattr__、__dir__

屬性描述符

__get__、__set__、__delete__

跟類相關的服務

__prepare__、__instancecheck__、__subclasscheck__

__repr__,__str__

_repr__ 所返回的字串應該準確、無歧義,並且盡可能表達出如何用**建立出這個被 列印的物件。因此這裡使用了類似呼叫物件構造器的表達形式(比如vector(3, 4)就是個 例子)。

__repr__ 和 __str__ 的區別在於,後者是在 str() 函式被使用,或是在用 print 函式列印 乙個物件的時候才被呼叫的,並且它返回的字串對終端使用者更友好。

__del__ 與 弱引用

del 不會刪除物件,而是刪除物件的引用。執行 del

操作後可能會導致物件不可獲取,從而被垃圾**機制刪除。

python 沒有直接銷毀物件的機制,cpython 中的垃圾**主要依靠引用計數,後來實現了分代垃圾**程式,它能把引用迴圈中不可獲取的物件銷毀。

弱引用不會增加物件的引用數量。不會妨礙所指物件被當作垃圾**。

(weakvaluedictionary 類 實現的是一種可變對映,裡面的值是物件的弱引用。被引用的物件在程式中的其他地方被當作垃圾**後,對應的鍵會自動從 weakvaluedictionary 中刪除。因此,weakvaluedictionary 經常用於快取)

弱引用的侷限

不是每個 python 物件都可以作為弱引用的目標(或稱所指物件)。基本的 list 和 dict 實 例不能作為所指物件,但是它們的子類可以輕鬆地解決這個問題.

但是,int 和 tuple 例項不能作為弱引用的目標,甚至它們的子類也不行。這些侷限基本上是 cpython 的實現細節,在其他 python 直譯器中情況可能不一樣。

__slots__

預設情況下,python 在各個例項中名為dict的字典裡儲存例項屬性。

通過設定 slots ,阻止例項建立 dict 成員。直譯器僅為指定成員分配記憶體空間

class

x:

__slots__ = ('

a','b'

)

def__init__

(self,a):

self.a = a

主要作用是為了建立海量資料時,提公升效率,對於非指定的物件,不開闢記憶體空間。

對 slots 的修改並不會影響類建立時設定的記憶體分配策略。

總之,如果使用得當,slots能顯著節省記憶體,不過有幾點要注意。

__cal__

來控制物件的建立過程

單例

class

my(type):

obj =none

def__call__(self, *args, **kwargs):

ifnot

my.obj:

obj = object.__new__

(self)

self.

__init__(obj, *args, **kwargs)

my.obj =obj

return

my.obj

class printer(metaclass=my):

裝飾器

from functools import

wraps

class

decorate:

def__init__

(self, name):

self.name =name

def__call__

(self, func):

@wraps(func)

def deco(*args, **kwargs):

if self.name == '

admin':

pass

elif self.name == '

student':

pass

)

elif self.name == '

teacher':

pass

return func(*args, **kwargs)

return

deco

@decorate(

'admin')

@decorate(

'student')

@decorate(

'teacher

')

python 物件導向 雙下劃線方法

1.str 和 repe class person object def init self,name,age self.name name self.age age def str self return stf 我叫 今年 歲 format self.name,self.age def repr...

python中的單下劃和雙下劃線屬性

級別 受保護的屬性 使用 父類物件和子類物件都可以直接呼叫,父類中受保護的屬性可以被子類覆蓋。可以看出它的普通的屬性沒啥區別,但是當使用 from module name import 匯入時,單下劃線開頭的變數和方法是不會被匯入的。必須使用 import module name 匯入整個模組,然後...

python的單下劃線和雙下劃線

python 類中的單下劃線開頭的變數表示 該方法為類的私有方法,原則上外部不能訪問,但是用.xx是可以訪問到的 雙下劃線開頭則是強制外部不能直接訪問的用.xx是訪問不到的,它內部其實是將變數名重新命名為 類名 變數名,所以可以通過.類名 變數名訪問 coding utf 8 author linh...