算數運算子
一元運算子 __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 成員。直譯器僅為指定成員分配記憶體空間
classx:
__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...