W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
?type()
?函數(shù)通常被用來(lái)判斷對(duì)象的類(lèi)型,在傳入三個(gè)參數(shù)的時(shí)候它可以用來(lái)動(dòng)態(tài)創(chuàng)建類(lèi)。
本文著重介紹傳入一個(gè)參數(shù)的情況,動(dòng)態(tài)創(chuàng)建類(lèi)請(qǐng)移步:python type()函數(shù)專(zhuān)題——?jiǎng)討B(tài)創(chuàng)建類(lèi)
另一個(gè)函數(shù)?isinstance()
?方法也可以用來(lái)判斷對(duì)象的類(lèi)型。
?isinstance()
?與?type()
? 區(qū)別:
?type()
? 不會(huì)認(rèn)為子類(lèi)是一種父類(lèi)類(lèi)型,不考慮繼承關(guān)系。
?isinstance()
? 會(huì)認(rèn)為子類(lèi)是一種父類(lèi)類(lèi)型,考慮繼承關(guān)系。
如果要判斷兩個(gè)類(lèi)型是否相同推薦使用 ?isinstance()
?。
以下是? type()
?方法的語(yǔ)法:
type(object)
# 或者
type(name, bases, dict)
單參數(shù)情況:
三參數(shù)情況:
單參數(shù)情況:返回這個(gè)對(duì)象的類(lèi)型
三參數(shù)情況:返回一個(gè)新的類(lèi)型對(duì)象(一個(gè)動(dòng)態(tài)創(chuàng)建的類(lèi))。
以下展示了使用 ?type()
? 函數(shù)判斷對(duì)象類(lèi)型的實(shí)例:
print("數(shù)值對(duì)象的變量類(lèi)型:")
print(type(1))
print('字符串對(duì)象的變量類(lèi)型:')
print(type('W3Cschool'))
print('列表對(duì)象的變量類(lèi)型:')
print(type([2]))
print('元組對(duì)象的變量類(lèi)型:')
print(type((1,2)))
print('字典對(duì)象的變量類(lèi)型:')
print(type({0:'zero'}))
print('判斷兩個(gè)對(duì)象的類(lèi)型是否相等')
x = 1
print(type(x) == int)
運(yùn)行結(jié)果如下:
數(shù)值對(duì)象的變量類(lèi)型:
<class 'int'>
字符串對(duì)象的變量類(lèi)型:
<class 'str'>
列表對(duì)象的變量類(lèi)型:
<class 'list'>
元組對(duì)象的變量類(lèi)型:
<class 'tuple'>
字典對(duì)象的變量類(lèi)型:
<class 'dict'>
判斷兩個(gè)對(duì)象的類(lèi)型是否相等
True
以下展示了使用?type()
?函數(shù)動(dòng)態(tài)創(chuàng)建一個(gè)類(lèi)的代碼:
class Animal():
#一個(gè)父類(lèi),用來(lái)被繼承的類(lèi)。通常我們使用都是直接繼承object類(lèi),但這邊為了直觀所以自己弄了一個(gè)類(lèi)
#這個(gè)父類(lèi)有一個(gè)name屬性,一個(gè)get_name方法,一個(gè)breathe方法
name = ""
def __init__(self,name):
self.name = name
def get_name(self):
return self.name
def breathe():
print("我可以呼吸")
#使用動(dòng)態(tài)創(chuàng)建類(lèi)的方法創(chuàng)建一個(gè)people類(lèi),繼承了animal類(lèi),需要多一個(gè)屬性sex
People = type("People",(Animal,) , {'sex':'M'}) # 我們定義了一個(gè)新類(lèi)叫People,他繼承于animal類(lèi),多了一個(gè)新的屬性sex
human = People('男人') #實(shí)例化這個(gè)類(lèi),讓我們來(lái)看看他有什么表現(xiàn)吧
print(type(human)) # 返回類(lèi)People的實(shí)例化對(duì)象human 的類(lèi)型<class '__main__.People'>)
print(dir(human)) #用來(lái)查看這個(gè)類(lèi)有什么屬性或方法
#我們使用的是dir方法,雖然看著很復(fù)雜,不過(guò)我們可以看到亂七八糟的結(jié)果里確實(shí)有父類(lèi)的兩個(gè)方法一個(gè)屬性,和我們添加進(jìn)去的sex屬性
# 當(dāng)然也可以自己使用以下這個(gè)類(lèi)的方法和屬性,這里我只想證明存在這些內(nèi)容,不多做功能展示
# 使用動(dòng)態(tài)創(chuàng)建了的方法創(chuàng)建一個(gè)Bird類(lèi),繼承于animal類(lèi),需要多一個(gè)fly的方法
def fly(self):
print("我可以飛")
Bird = type('Bird', (Animal,), {'fly': fly}) #我們定義了一個(gè)新類(lèi)叫Bird,繼承于Animal類(lèi),多了一個(gè)新的方法fly
bird =Bird('烏鴉') # 實(shí)例化這個(gè)類(lèi),讓我們看到他有什么表現(xiàn)吧
print(type(bird)) # 返回類(lèi)Bird的實(shí)例化對(duì)象bird的類(lèi)型 <class '__main__.Bird'>)
print(dir(bird)) # 用來(lái)查看這個(gè)類(lèi)有什么屬性或方法
bird.fly() # 試用一下這個(gè)fly方法,看它是否實(shí)現(xiàn)了功能
#使用動(dòng)態(tài)創(chuàng)建類(lèi)的方法創(chuàng)建一個(gè)Durk類(lèi),繼承于animal類(lèi),需要多一個(gè)屬性weight和一個(gè)方法fly()
Durk = type("Durk",(Animal,),{"weight":0,"fly":fly}) #我們定義了一個(gè)新類(lèi)叫Durk,繼承于Animal類(lèi),多了一個(gè)新的方法fly()和一個(gè)新屬性weight
callDuck = Durk('柯?tīng)桒?) #實(shí)例化這個(gè)類(lèi),讓我們看到他有什么表現(xiàn)吧
print(type(callDuck)) # 返回類(lèi)Durk的實(shí)例化對(duì)象callDark的類(lèi)型 <class '__main__.Dark'>)
print(dir(callDuck)) # 用來(lái)查看這個(gè)類(lèi)有什么屬性或方法
運(yùn)行結(jié)果如下:
<class '__main__.People'>
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'breathe', 'get_name', 'name', 'sex']
<class '__main__.Bird'>
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'breathe', 'fly', 'get_name', 'name']
我可以飛
<class '__main__.Durk'>
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'breathe', 'fly', 'get_name', 'name', 'weight']
?type()
?與? isinstance()
?區(qū)別:
class A:
pass
class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: