python的魔法函式 python常用的魔法函式

2021-10-21 07:01:33 字數 2642 閱讀 8198

__new__與__init__

__new__在例項建立之前被呼叫的,就是建立例項後返回該例項物件,是個靜態方法。

__init__是當例項物件建立完成後被呼叫的,然後設定物件屬性的一些初始值,通常用在初始化乙個類例項的時候。是乙個例項方法。

class foo(object):

def __init__(self):

print('init')

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

print('new')

return object.__new__(cls)

#__new__ 沒有返回例項物件,則__init__ 不會被呼叫。

開發模式:單例

確保乙個類只有乙個例項

應用場景:

很多地方同時呼叫就會例項多個浪費server資源

單例模式就可以解決!

class singleton(object):

__instance=none

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

if cls.__instance is none:

cls.__instance=object.__new__(cls)

return cls.__instance

初始化類屬性時,私有化屬性只能類自身呼叫

class foo(object):

def __init__(self,x,y):

self.x=x

self.__y=y

f=foo(1,2)

# print(f.x,f.y) 不能直接呼叫私有化屬性

方法1:

class foo(object):

def __init__(self,x,y):

self.x=x

self.__y=y

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

print('new')

return object.__new__(cls)

def gety(self):

return self.__y

def sety(self,y):

self.__y=y

f=foo(1,2)

f.x=3

f.sety(4)

print(f.x,f.gety())

方法2:

class foo(object):

def __init__(self,x,y):

self.x=x

self.__y=y

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

print('new')

return object.__new__(cls)

@property

def y(self):

return self.__y

@y.setter

def y(self,y):

self.__y=y

f=foo(1,2)

f.x=3

f.y=4

print(f.x,f.y)

__str__

返回乙個字串,當做這個物件的描寫

當呼叫print時列印使用

class foo:

def __str__(self):

return 'describe'

f=foo()

print(f)

__call__

將類的物件當作函式直接呼叫

class foo:

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

print('call method')

f=foo()

f()__enter__和__exit__

class foo:

def open(self):

print('open')

def do(self):

print('do')

def close(self):

print('close')

def __enter__(self):

self.open()

def __exit__(self, exc_type, exc_val, exc_tb):

self.close()

f=foo()

with f:

f.do()

__getattr__和__setattr__

__getattr__訪問乙個不存在的屬性時會呼叫此方法,如果屬性存在則不會呼叫。

__setattr__所有的屬性設定都會呼叫此方法,並且只有擁有這個魔法方法的物件才可以設定屬性

class foo:

def __init__(self,x):

self.x=x

def __getattr__(self, item):

return item

def __setattr__(self, key, value):

print('set')

object.__setattr__(self, key, value)

f=foo(3)

f.x=4

print(f.x)

print(f.y)

python的魔法函式

所以還是老老實實的把自己的基本功練好,物件導向玩的爐火純青,其他的不過是稍加訓練,跟賣藝的學幾招也能稱霸一片天。哈哈 牛吹的太過了,還是回到正題,總結分享一下一些稍微不太熟悉的魔法方法。一 str 它表示的是直接列印物件實現的方法,str 是被print函式呼叫的,一般都是返回乙個值,這個值是以字串...

python的魔法函式

所以還是老老實實的把自己的基本功練好,物件導向玩的爐火純青,其他的不過是稍加訓練,跟賣藝的學幾招也能稱霸一片天。哈哈 牛吹的太過了,還是回到正題,總結分享一下一些稍微不太熟悉的魔法方法。一 str 它表示的是直接列印物件實現的方法,str 是被print函式呼叫的,一般都是返回乙個值,這個值是以字串...

python魔法函式

python中魔法函式簡單上來說就是在構建某個類的時候,給類定義一些初始的方法,來實現類物件的某些屬性或者方法而準備。其形式如下,下雙劃線開頭雙劃線結尾 初始化乙個學生class class student def init self,students list self.students list...