python成员方法共享吗_python 入坑路 类的特殊成员方法
一、概述
前面我們講了類的方法,有普通方法,就是我們自己定義的方法,還有靜態(tài)方法,類方法,屬性方法,
其實(shí)還有另一類方法,叫做類的特殊成員方法
二、類的特殊成員方法
2.1 __doc__? ,表示類的描述信息
class Dog(object):
'''
dog class #__doc__ 就是打印這里的信息
'''
def __init__(self,name):
self.name=name
self.age=None
self.__sex=None
def walk(self):
print("%s is walking..." %self.name)
d=Dog("niubi")
print(d.__doc__)
-----輸出----
dog class
2.2 __module__和__class__
說明:
作用:當(dāng)多次引用的時(shí)候,查看是從哪里導(dǎo)入的。沒啥卵用
__module__: 表示當(dāng)前操作的對象在哪個(gè)模塊
__class__:表示當(dāng)前操作的對象的類是什么
2.3?__init__
說明:構(gòu)造方法,通過類創(chuàng)建對象時(shí),自動觸發(fā)執(zhí)行
2.4 __del__
說明:析構(gòu)方法,當(dāng)對象在內(nèi)存中被釋放時(shí),自動觸發(fā)執(zhí)行
2.5__call__
class Foo(object):
def __init__(self):
self.name = "nb"
def __call__(self, *args, **kwargs): # 重寫call方法
print("running call", args, kwargs)
f = Foo() # 執(zhí)行__init__
f(1, 2, 3, name="nb") # 執(zhí)行call方法,也可以寫成 Foo()(1,2,3,name="nb")
---
running call (1, 2, 3) {'name': 'nb'}
2.6__dict__? ,挺有用
類.__dict__ 查看類中所有方法成員
class Dog(object):
'''
dog class
'''
def __init__(self,name):
self.name=name
self.age=None
self.__sex=None
def walk(self):
print("%s is walking..." %self.name)
def eat(self,food):
print("%s is eating %s" %(self.name,food))
def age(self,age):
self.age=age
def sex(self):
return self.__sex
d=Dog("NIUBI")
print(Dog.__dict__)
=======
{'__module__': '__main__', '__doc__': '\n dog class\n ', '__init__': , 'walk': , 'eat': , 'age': , 'sex': , '__dict__': , '__weakref__': }
實(shí)例.__dict__? :打印出類中所有屬性,不包括類屬性。
class Dog(object):
'''
dog class
'''
class_shuxing="hehe" #這個(gè)類屬性沒有被打印出來
def __init__(self,name):
self.name=name
self.age=None
self.__sex=None
def walk(self):
print("%s is walking..." %self.name)
def eat(self,food):
print("%s is eating %s" %(self.name,food))
def age(self,age):
self.age=age
def sex(self):
return self.__sex
d=Dog("NIUBI")
#print(Dog.__dict__)
print(d.__dict__)
==============
{'name': 'NIUBI', 'age': None, '_Dog__sex': None}
#不包括類屬性
2.7 __str__? ,
如果一個(gè)類中定義了__str__方法,那么在打印 對象 時(shí),默認(rèn)輸出該方法的返回值 ,據(jù)說 Djiango 中很長用,以后詳解
class test(object):
def __init__(self,name):
self.name=name
def __str__(self):
return "".format(self.name)
d=test("hehe")
print(d)
--------------
2.8??__getitem__、__setitem__、__delitem__
說明:用于索引操作,如字典。以上分別表示獲取、設(shè)置、刪除數(shù)據(jù)
作用:據(jù)說可以用類封裝一些東西,然后暴露給用戶一個(gè)字典,在類中控制用戶對字典操作的權(quán)限。
class test(object):
def __getitem__(self, item):
print("getitem",item)
def __setitem__(self, key, value):
print("setitem",key,value)
def __delitem__(self, key):
print("delete",key)
t=test()
t["name"]
t["name"]="nb"
del t["name"]
-----------------
getitem name
setitem name nb
delete name #注:這邊的__delitem__沒有做真正的刪除,只是觸發(fā)這個(gè)方法,想要真正刪除,只需要在__delitem__函數(shù)中添加刪除功能即可
總結(jié)
以上是生活随笔為你收集整理的python成员方法共享吗_python 入坑路 类的特殊成员方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工商信用卡已开户多久寄出
- 下一篇: 京东白条会弄花征信吗