国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python反射和內置方法重寫操作詳解

2020-01-04 14:38:09
字體:
來源:轉載
供稿:網友

本文實例講述了Python反射和內置方法重寫操作。分享給大家供大家參考,具體如下:

isinstance和issubclass

isinstance(obj,cls)檢查是否obj是否是類 cls 的對象,類似 type()

class Foo(object):  passobj = Foo()isinstance(obj, Foo)

issubclass(sub, super)檢查sub類是否是 super 類的派生類

class Foo(object): passclass Bar(Foo): passissubclass(Bar, Foo)

反射

1 什么是反射

反射的概念是由Smith在1982年首次提出的,主要是指程序可以訪問、檢測和修改它本身狀態或行為的一種能力(自省)。這一概念的提出很快引發了計算機科學領域關于應用反射性的研究。它首先被程序語言的設計領域所采用,并在Lisp和面向對象方面取得了成績。

四個反射函數

hasattr(obj,str)
檢測是否含有某屬性

getattr(obj,str)
獲取屬性,不存在報錯

setattr(obj,str,value)
設置屬性

delattr(obj,str)
刪除屬性,不存在報錯

導入其他模塊,利用反射查找該模塊是否存在某個方法

def test(): print('from the test')

item系列

__getitem__/__setitem__/__delitem__

class Foo: def __init__(self,name):  self.name=name def __getitem__(self, item):  print(self.__dict__[item]) def __setitem__(self, key, value):  self.__dict__[key]=value def __delitem__(self, key):  print('del obj[key]時,我執行')  self.__dict__.pop(key) def __delattr__(self, item):  print('del obj.key時,我執行')  self.__dict__.pop(item)f1=Foo('sb')f1['age']=18f1['age1']=19del f1.age1del f1['age']f1['name']='alex'print(f1.__dict__)

運行結果:

del obj.key時,我執行
del obj[key]時,我執行
{'name': 'alex'}

__new__

class A: def __init__(self):  self.x = 1  print('in init function') def __new__(cls, *args, **kwargs):  print('in new function')  return object.__new__(A, *args, **kwargs)a = A()print(a.x)

運行結果:

in new function
in init function
1

單例模式:

class A: def __new__(cls):  if not hasattr(cls,'obj'):   cls.obj = object.__new__(cls)  return cls.obja = A()b = A()print(a is b)

運行結果:

True

__call__

對象后面加括號,觸發執行。

注:構造方法的執行是由創建對象觸發的,即:對象 = 類名() ;而對于 __call__ 方法的執行是由對象后加括號觸發的,即:對象() 或者 類()()

class Foo: def __init__(self):  pass def __call__(self, *args, **kwargs):  print('__call__')obj = Foo() # 執行 __init__obj()  # 執行 __call__

運行輸出:

__call__

__len__

class A: def __init__(self):  self.a = 1  self.b = 2 def __len__(self):  return len(self.__dict__)a = A()print(len(a))

運行結果:

2

__hash__

class A: def __init__(self):  self.a = 1  self.b = 2 def __hash__(self):  return hash(str(self.a)+str(self.b))a = A()print(hash(a))

運行結果:

-1777982230

__eq__

class A: def __init__(self):  self.a = 1  self.b = 2 def __eq__(self,obj):  if self.a == obj.a and self.b == obj.b:   return Truea = A()b = A()print(a == b)

運行結果:

True

合并名字性別一樣的人:

class Person: def __init__(self,name,age,sex):  self.name = name  self.age = age  self.sex = sex def __hash__(self):  return hash(self.name+self.sex) def __eq__(self, other):  if self.name == other.name and self.sex == other.sex:return Truep_lst = []for i in range(84): p_lst.append(Person('egon',i,'male'))print(p_lst)print(set(p_lst))

運行結果:

[<__main__.Person object at 0x01425AB0>, <__main__.Person object at 0x01425AD0>, <__main__.Person object at 0x01425AF0>, <__main__.Person object at 0x01425910>, <__main__.Person object at 0x014258D0>, <__main__.Person object at 0x01425950>, <__main__.Person object at 0x01425970>, <__main__.Person object at 0x014259D0>, <__main__.Person object at 0x01425C70>, <__main__.Person object at 0x01425890>, <__main__.Person object at 0x01425B30>, <__main__.Person object at 0x01425BB0>, <__main__.Person object at 0x01425C30>, <__main__.Person object at 0x01429710>, <__main__.Person object at 0x01429730>, <__main__.Person object at 0x014298F0>, <__main__.Person object at 0x01429910>, <__main__.Person object at 0x01429930>, <__main__.Person object at 0x01429950>, <__main__.Person object at 0x01429970>, <__main__.Person object at 0x01429990>, <__main__.Person object at 0x014299B0>, <__main__.Person object at 0x014299D0>, <__main__.Person object at 0x014299F0>, <__main__.Person object at 0x01429A10>, <__main__.Person object at 0x01429A30>, <__main__.Person object at 0x01429A50>, <__main__.Person object at 0x01429A70>, <__main__.Person object at 0x01429A90>, <__main__.Person object at 0x01429AB0>, <__main__.Person object at 0x01429AD0>, <__main__.Person object at 0x01429AF0>, <__main__.Person object at 0x01429B10>, <__main__.Person object at 0x01429B30>, <__main__.Person object at 0x01429B50>, <__main__.Person object at 0x01429B70>, <__main__.Person object at 0x01429B90>, <__main__.Person object at 0x01429BB0>, <__main__.Person object at 0x01429BD0>, <__main__.Person object at 0x01429BF0>, <__main__.Person object at 0x01429C10>, <__main__.Person object at 0x01429C30>, <__main__.Person object at 0x01429C50>, <__main__.Person object at 0x01429C70>, <__main__.Person object at 0x01429C90>, <__main__.Person object at 0x01429CB0>, <__main__.Person object at 0x01429CD0>, <__main__.Person object at 0x01429CF0>, <__main__.Person object at 0x01429D10>, <__main__.Person object at 0x01429D30>, <__main__.Person object at 0x01429D50>, <__main__.Person object at 0x01429D70>, <__main__.Person object at 0x01429D90>, <__main__.Person object at 0x01429DB0>, <__main__.Person object at 0x01429DD0>, <__main__.Person object at 0x01429DF0>, <__main__.Person object at 0x01429E10>, <__main__.Person object at 0x01429E30>, <__main__.Person object at 0x01429E50>, <__main__.Person object at 0x01429E70>, <__main__.Person object at 0x01429E90>, <__main__.Person object at 0x01429EB0>, <__main__.Person object at 0x01429ED0>, <__main__.Person object at 0x01429EF0>, <__main__.Person object at 0x01429F10>, <__main__.Person object at 0x01429F30>, <__main__.Person object at 0x01429F50>, <__main__.Person object at 0x01429F70>, <__main__.Person object at 0x01429F90>, <__main__.Person object at 0x01429FB0>, <__main__.Person object at 0x01429FD0>, <__main__.Person object at 0x01429FF0>, <__main__.Person object at 0x01751030>, <__main__.Person object at 0x01751050>, <__main__.Person object at 0x01751070>, <__main__.Person object at 0x01751090>, <__main__.Person object at 0x017510B0>, <__main__.Person object at 0x017510D0>, <__main__.Person object at 0x017510F0>, <__main__.Person object at 0x01751110>, <__main__.Person object at 0x01751130>, <__main__.Person object at 0x01751150>, <__main__.Person object at 0x01751170>, <__main__.Person object at 0x01751190>]
{<__main__.Person object at 0x01425AB0>}

希望本文所述對大家Python程序設計有所幫助。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉首市| 荥经县| 敖汉旗| 高清| 阿勒泰市| 旬邑县| 丘北县| 灌云县| 凤山市| 敦煌市| 巨野县| 会宁县| 肥东县| 永丰县| 南京市| 东乌珠穆沁旗| 桑植县| 新干县| 屯门区| 科技| 新田县| 交城县| 山阴县| 炉霍县| 漳州市| 都匀市| 深水埗区| 搜索| 澄江县| 中江县| 苍溪县| 贺州市| 潞西市| 关岭| 米泉市| 正镶白旗| 吉首市| 信宜市| 芮城县| 焦作市| 垫江县|