一些內建的魔術方法

2022-08-27 14:54:13 字數 3006 閱讀 3255

_call_ : 物件() 呼叫這個類中的__call__方法

class a:

def __call__(self, *args, **kwargs):

print('_________')

obj = a()

print(callable(obj))

obj()

a()() #obj = a() ==>obj()

__len__  : len(物件) 需要實現這個,類中加__len__方法
class cls:

def __init__(self,name):

self.name = name

self.students =

def len(self):

return len(self.students)

def __len__(self):

return len(self.students)

py22 = cls('py22期')

print(py22.len())

print(len(py22))

---------------------

class pow:

def __init__(self,n):

self.n = n

def __pow2__(self):

return self.n ** 2

def pow2(obj):

return obj.__pow2__()

obj = pow(10)

print(pow2(obj))

例項化的時候

先建立一塊物件的空間,有乙個指標能指向類 -->new

呼叫init -->init

class a:

def __new__(cls, *args, **kwargs):

o = object.__new__(cls)

print('執行new',o)

return o

def __init__(self):

print('執行init',self)

a()

# 執行new <__main__.a object at 0x00000000022802c8>

# 執行init <__main__.a object at 0x00000000022802c8>

設計模式 --單例模式

# 乙個類 從頭到尾 只會建立一次self的空間

class baby:

__instance = none #標識

def __new__(cls, *args, **kwargs):

if cls.__instance is none:

cls.__instance = super().__new__(cls)

return cls.__instance

def __init__(self,cloth,pants):

self.cloth = cloth

self.pants = pants

b1 = baby('紅毛衣','綠皮褲')

print(b1.cloth) #紅毛衣

b2 = baby('白襯衫','黑豹紋')

print(b1.cloth) #白襯衫

print(b2.cloth) #白襯衫

_str_:幫助我們在列印\展示物件的時候更直觀的顯示物件內容 %s str() print()

_repr_:repr是str的備胎,同時還和%r和repr有合作關係

class clas:

def __init__(self):

self.student =

def __str__(self):

return str(self.student)

#py22 = clas()

print(py22)

print(str(py22))

print('我們py22班 %s'%py22)

print(py22)

print(py22)

# ['大壯']

# ['大壯']

# 我們py22班 ['大壯']

# ['大壯']

# ['大壯', '大壯']

# 在列印乙個物件的時候 呼叫__str__方法

# 在%s拼接乙個物件的時候 呼叫__str__方法

# 在str乙個物件的時候 呼叫__str__方法

class clas:

def __init__(self):

self.student =

def __repr__(self):

return str(self.student)

def __str__(self):

return 'aaa'

py22 = clas()

print(py22)

print(str(py22))

print('我們py22班 %s'%py22)

print('我們py22班 %r'%py22)

print(repr(py22))

# aaa

# aaa

# 我們py22班 aaa

# 我們py22班 ['大壯']

# ['大壯']

# 當我們列印乙個物件 用%s進行字串拼接 或者str(物件)總是呼叫這個物件的__str__方法

# 如果找不到__str__,就呼叫__repr__方法

# __repr__不僅是__str__的替代品,還有自己的功能

# 用%r進行字串拼接 或者用repr(物件)的時候總是呼叫這個物件的__repr__方法

JS的一些內建方法

一 內建函式math 1.math 1 math.abs 求絕對值 2 math.pi 圓周率 2.求近似值 1 math.round 四捨五入 負數 0.5 進一 0.5 捨去 2 math.ceil 向上取整 3 math.floor 向下取整 3.求最值 1 math.max 求最大值 2 m...

JS的一些內建方法

一 內建函式math 1.math 1 math.abs 求絕對值 2 math.pi 圓周率 2.求近似值 1 math.round 四捨五入 負數 0.5 進一 0.5 捨去 2 math.ceil 向上取整 3 math.floor 向下取整 3.求最值 1 math.max 求最大值 2 m...

陣列內建的一些處理方法

在js中個,陣列是乙個array物件,有它自己內建的方法,今天來說一部分,可以去除迴圈,來實現對陣列的遍歷並且進行一定的操作 1.foreach 陣列遍歷方法,用在陣列的遍歷上,引數是乙個 函式,函式會傳入陣列的每乙個數值,如果陣列索引被修改了,那麼遍歷會繼續沿著索引向下。例如 1 var arra...