Python——多态、检查类型
程序员文章站
2023-04-05 08:41:00
一、多态 Python变量并不需要声明类型,同一个变量可以在不同的时间引用不同的对象,当一个变量在调用同一个方法,可以呈现出多种行为,而具体呈现出哪种行为由该变量引用的对象来决定,这就是多态。 先看一下以下例子: 上面的例子中,当涉及Host类的pet()方法时,该方法传入的参数对象只需要具有beh ......
一、多态
python变量并不需要声明类型,同一个变量可以在不同的时间引用不同的对象,当一个变量在调用同一个方法,可以呈现出多种行为,而具体呈现出哪种行为由该变量引用的对象来决定,这就是多态。
先看一下以下例子:
class dog:
def behavior(self,skill):
print ('小狗会%s!'%skill)
class cat:
def behavior(self,skill):
print ('小猫会%s!'%skill)
class host:
def pet(self,met,*arg):
print ('小明的宠物有特殊技能,',end = '')
met.behavior(self,*arg)
h = host()
h.pet(dog,'唱') # 打印 小明的宠物有特殊技能,小狗会唱!
h.pet(cat,'跳') # 打印 小明的宠物有特殊技能,小猫会跳!
上面的例子中,当涉及host类的pet()方法时,该方法传入的参数对象只需要具有behavior()方法就可以了,怎样的行为特征完全取决于对象本身。
二、检查类型
python提供了两个函数来检查类型,issubclass()和isinstance()。
先查看一下issubclass()函数的用法,
>>> help(issubclass)
help on built-in function issubclass in module builtins:
issubclass(cls, class_or_tuple, /)
return whether 'cls' is a derived from another class or is the same class.
a tuple, as in ``issubclass(x, (a, b, ...))``, may be given as the target to
check against. this is equivalent to ``issubclass(x, a) or issubclass(x, b)
or ...`` etc.
可以看到,该函数用于判断cls参数是否是class_or_tuple参数的子类或者是同一个类。
例:
class dog:
def behavior(self):
print ('小狗会唱!')
class cat:
def skill(self):
print ('小猫会跳!')
class host(dog):
def pet(self):
print ('小明有一只宠物!')
print (issubclass(cat,cat)) # 同一个类,打印 true
print (issubclass(dog,host)) # dog类是host类的父类,所以打印 false
print (issubclass(dog,cat)) # dog类不是cat类的子类,所以打印 false
print (issubclass(host,dog)) # host类是dog类的子类,所以打印 true
再看一下isinstance()函数的用法,
>>> help(isinstance)
help on built-in function isinstance in module builtins:
isinstance(obj, class_or_tuple, /)
return whether an object is an instance of a class or of a subclass thereof.
a tuple, as in ``isinstance(x, (a, b, ...))``, may be given as the target to
check against. this is equivalent to ``isinstance(x, a) or isinstance(x, b)
or ...`` etc.
isinstance()函数用于判断一个对象是否是一个已知的类型,obj参数类型和class_or_tuple参数类型相同,则返回ture,否则false。
例:
a = '1111'
print (type(a)) # <class 'str'>
print (isinstance(a,str)) # 参数a类型不是str,返回 true
print (isinstance(a,int)) # 参数a类型不是int,返回 false