1. 程式人生 > >python 面向對象之路 方法和函數 反射

python 面向對象之路 方法和函數 反射

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 面向對象之路 方法和函數 反射