Python3 type() 函數(shù) - 判斷對象的類型

2023-04-21 16:37 更新

Python 內(nèi)置函數(shù) Python 內(nèi)置函數(shù)


描述

?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ù)情況:

  • object:一個對象

三參數(shù)情況:

  • name:要動態(tài)創(chuàng)建的類的名稱。
  • bases:繼承于哪個父類(這是一個元組?。?。
  • dict:要添加的屬性和方法(這是一個字典?。?/li>

返回值

單參數(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']

補(bǔ)充

?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

Python 內(nèi)置函數(shù) Python 內(nèi)置函數(shù)



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號