类的特殊成员反射异常处理
生活随笔
收集整理的這篇文章主要介紹了
类的特殊成员反射异常处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
類的特殊成員
1.__doc__表示類的描述信息
class Foo(object):""" 描述類信息,這是用于看片的神奇 """def func(self):passprint(Foo.__doc__) #輸出:描述類信息,這是用于看片的神奇2.__module__和 class
module 表示當前操作的對象在那個模塊
class 表示當前操作的對象的類是什么
class C():def __init__(self):self.name = 'wupeiqi' from lib.aa import Cobj = C() print(obj.__module__) # 輸出lib.aa,即:輸出模塊print(obj.__class__) # 輸出 lib.aa.C,即:輸出類3.__init__構造方法,通過類創建對象時,自動觸發執行
4.__del__
析構方法,當對象在內存中被釋放時,自動觸發執行
5.__call__
對象后面加括號,觸發執行。
class Foo(object):def __init__(self):print("i am init")def __call__(self, *args, **kwargs):print("i am call")
obj=Foo() #執行__init__
obj() #執行__call__
#輸出:i am call
6.__dict__ 查看類或對象中的所有成員
class Province(object):country = 'China'def __init__(self, name, count):self.name = nameself.count = countdef func(self, *args, **kwargs):print('func')# 獲取類的成員,即:靜態字段、方法、 print(Province.__dict__) #打印類里的所有屬性,不包括實例屬性# 輸出:{'country': 'China', '__module__': '__main__', 'func': <function func at 0x10be30f50>, '__init__': <function __init__ at 0x10be30ed8>, '__doc__': None}obj1 = Province('HeBei', 10000) print(obj1.__dict__) #打印實例屬性 # 獲取 對象obj1 的成員 # 輸出:{'count': 10000, 'name': 'HeBei'}obj2 = Province('HeNan', 3888) print(obj2.__dict__) # 獲取 對象obj1 的成員 # 輸出:{'count': 3888, 'name': 'HeNan'}7.__str__ 當需要轉化為字符串時執行該函數
如果一個類中定義了__str__方法,那么在打印對象時,默認輸出該方法的返回值。
class Foo:def __str__(self):return 'alex li'obj = Foo()
print(obj)
# 輸出:alex li 8.__getitem__、setitem、delitem
用于索引操作,如字典。以上分別表示獲取、設置、刪除數據
class Foo(object):def __getitem__(self, key):print('__getitem__',key)def __setitem__(self, key, value):print('__setitem__',key,value)def __delitem__(self, key):print('__delitem__',key)obj = Foo()result = obj['k1'] # 自動觸發執行 __getitem__
obj['k2'] = 'alex' # 自動觸發執行 __setitem__
del obj['k1'] 9__new__ ?metaclass
==類的生成 調用 順序依次是 new --> init --> call==
詳情參考alex博客
http://www.cnblogs.com/alex3714/articles/5213184.html反射
# #### 檢查是否含有成員 #### hasattr(obj, 'name') hasattr(obj, 'func')# #### 獲取成員 #### getattr(obj, 'name') getattr(obj, 'func')# #### 設置成員 #### setattr(obj, 'age', 18) setattr(obj, 'show', lambda num: num + 1)# #### 刪除成員 #### # delattr(obj, 'name') # delattr(obj, 'func') print(getattr(obj,'age') ) print(getattr(obj,'show')(123))異常處理
1.異常結構
try:# 主代碼塊pass except KeyError as e:# 異常時,執行該塊pass else:# 主代碼塊執行完,執行該塊pass finally:# 無論異常與否,最終執行該塊pass2.主動觸發異常
try:raise Exception('錯誤了。。。') except Exception as e:print(e)3.自定義異常
class WupeiqiException(Exception):def __init__(self, msg):self.message = msgdef __str__(self):return self.messagetry:raise WupeiqiException('我的異常') except WupeiqiException as e:print(e)4.常用的異常
AttributeError 試圖訪問一個對象沒有的樹形,比如foo.x,但是foo沒有屬性x IOError 輸入/輸出異常;基本上是無法打開文件 ImportError 無法引入模塊或包;基本上是路徑問題或名稱錯誤 IndentationError 語法錯誤(的子類) ;代碼沒有正確對齊 IndexError 下標索引超出序列邊界,比如當x只有三個元素,卻試圖訪問x[5] KeyError 試圖訪問字典里不存在的鍵 KeyboardInterrupt Ctrl+C被按下 NameError 使用一個還未被賦予對象的變量 SyntaxError Python代碼非法,代碼不能編譯(個人認為這是語法錯誤,寫錯了) TypeError 傳入對象類型與要求的不符合 UnboundLocalError 試圖訪問一個還未被設置的局部變量,基本上是由于另有一個同名的全局變量, 導致你以為正在訪問它 ValueError 傳入一個調用者不期望的值,即使值的類型是正確的5.斷言
a=[1,2,3,4] assert type(a) is list print('list......')轉載于:https://www.cnblogs.com/Jason-lin/p/7545933.html
總結
以上是生活随笔為你收集整理的类的特殊成员反射异常处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android kotlin基础语法
- 下一篇: C语言编程轰炸,C语言实现数字炸弹小游戏