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