python 面向對象之路 方法和函數 反射
阿新 • • 發佈:2018-08-30
ron 創建 print sub *args port style 被調用 pre
一.
isinstance(檢查第一個參數是否是第二個參數的 子子孫孫類)
class Base(object): pass class Foo(Base): pass obj1 = Foo() print(isinstance(obj1,Foo))
print(isinstance(obj1,Base))
issubclass(檢查的一個參數(對象) 是否是第二個參數(類及父類)的實例)
class Base(object): pass class Foo(Base): pass class Bar(Foo): pass print(issubclass(Bar, Base))
type(獲取當前對象是由那個類創建.)
class Foo(object): pass obj = Foo() print(obj,type(obj)) # 獲取當前對象是由那個類創建。 if type(obj) == Foo: print(‘obj是Foo類型‘)
二.方法和函數
稱謂:
類. 就是方法
外面的, 就是函數
對象.dag 就是方法
類.aaa 就是函數
xxx 也是函數
打印查看:
function
method
from types import MethodType,FunctionType def check(arg): if isinstance(arg,MethodType): print(‘arg是方法‘) elif isinstance(arg,FunctionType): #檢查arg是方法還是函數 print(‘arg是個函數‘) else: print(‘不知道是什麽‘)
三.反射
getattr # 根據字符串的形式,去對象中找成員。
hasattr # 根據字符串的形式,去判斷對象中是否有成員。 setattr # 根據字符串的形式,動態的設置一個成員(內存) delattr # 根據字符串的形式,動態的刪除一個成員(內存)
總結:
v = getattr(obj,‘func‘) 根據字符串為參數(第二個參數),去對象(第一個參數)中尋找與之同名的成員。
拓展:見過的啥後面加() ?
類()
對象()
函數()
方法()
以上都可以被調用
示例
def func(): pass
class Foo(object): def __call__(self, *args, **kwargs): pass def func(self): pass
obj = Foo() print(callable(func)) print(callable(Foo)) print(callable(obj)) print(callable(obj.func))
python 面向對象之路 方法和函數 反射