Python 類的特殊成員方法

2021-08-18 19:18:42 字數 2660 閱讀 3642

1. __doc__  描述類的資訊

class foo(object):

# 單引號和雙引號都可以

"""這裡描述類的資訊"""

def func(self):

pass

print(foo.__doc__) #>>>這裡描述類的資訊

2. __call__ 物件後面加括號,觸發執行

# __call__方法的執行是由物件加括號觸發的,即:物件()或者 類()()

class foo(object):

def __call__(self, *args, **kwargs):

print("running call", args, kwargs)

foo = foo()

foo(1, 2, 3, name = "userpython") #>>>running call (1, 2, 3)

foo()(1, 2, 3, name = "userpython") #>>>running call (1, 2, 3)

3. __dict__ 檢視類或物件中的所有成員

class foo(object):

def __init__(self, name, age):

self.name = name

self.age = age

foo = foo("userpython", 17)

print(foo.__dict__) #列印類裡的所有屬性,不包括例項屬性

print(foo.__dict__) #列印所有例項屬性,不包括類屬性

4. __str__ 如果乙個類中定義了__str__方法,那麼在列印物件時,預設輸出該方法的返回值

class foo(object):

def __init__(self, name, age):

self.name = name

self.age = age

def __str__(self):

return "" % self.name

foo = foo("userpython", 17)

print(foo) #>>>

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

foo = foo()

foo["name"] = "userpython" #>>>__setitem__ name userpython 觸發__setitem__

foo["name"] #>>>__getitem__ name 觸發__getitem__

del foo["name"] #>>>__delitem__ name 觸發__delitem__

6. __new__ 、__metaclass__

class foo(object):

def __init__(self, name):

self.name = name

foo = foo("userpython")

'''上述**中,foo是通過foo類例項化的物件,其實,不僅foo是乙個物件,foo類本身也是乙個物件,因為在python中一切事物都是物件。

如果按照一切事物都是物件的理論:foo物件時通過執行foo類的構造方法建立,那麼foo類物件應該也是通過執行某個類的構造方法建立。

'''print(type(foo)) #>>>表示foo物件是由foo類建立

print(type(foo)) #>>>表示foo類物件是由type類建立

# 所以,foo物件是foo類的乙個例項,foo類物件時type類的乙個例項,即:foo類物件是通過type類的構造方法建立。那麼,建立類就可以有兩種方式了

# 普通方式

class foo(object):

def func(self):

print("hello userpython")

# 特殊方式

def func(self):

print("hello %s" % self.name)

def __init__(self, name, age): #構造方法

self.name = name

self.age = age

# 建立了乙個type類,然後用type類例項化了乙個foo類,由於foo本身是乙個類,所以foo又例項化了乙個物件foo

foo = type('foo', (object, ), )

foo = foo("userpython", 19)

foo.func()

print(type(foo))

Python 類的特殊成員方法

1.doc class person object 這個類是描述人這個物件的 print person.doc 列印類的描述資訊 2.call 物件後面加 觸發執行 class person object 這個類是描述人這個物件的 def init self name self.name name ...

python 類的特殊成員方法

doc 輸出類的描述資訊 module 表示當前操作的物件在那個模組 class 表示當前操作的物件的類是什麼 init 構造方法,通過類建立物件是,自動觸發執行。del 構造方法,當物件在記憶體中釋放是,自動觸發執行。call 物件後面加括號,觸發執行 注 構造方法的執行是由建立物件觸發的,即 物...

python講解類的特殊成員方法

class dog object 這個類是描述狗這個物件的 def init self,name self.name name staticmethod 實際上跟類沒有什麼關係了。eat和類的關係截斷了,只是類下面函式 靜態方法 只是名義上歸類管理,實際上在靜態方法裡訪問不了類或例項中的任何屬性 d...