__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...