Python进阶之路 8.2.7 接口

版权声明:本教程只限学习交流,不得用于商业用途。 https://blog.csdn.net/weixin_45086637/article/details/90958948

8.2.7 接口

在很多面向对象语言(Java、C#)中都有接口的概念。接口其实就是一个规范,指定了一个类中都有哪些成员。接口也被经常用在多态中,一个类可以有多个接口,也就是有多个规范。不过Python语言中并没有这些东西,在调用一个对象的方法时,就假设这个方法在对象中存在吧。当然,更稳妥的方法就是在调用方法之前先使用hasattr函数检测一下,如果方法在对象中存在,该函数返回True,否则返回False。

# c是一个对象,如果c中存在名为process的方法,hasattr函数返回True,否则返回False
print(hasattr(c,'process'))

除了可以使用hasattr函数判断对象中是否存在某个成员外,还可以使用getattr函数实现同样的功能。该函数有三个参数,其中前两个参数与hasattr函数完全一样,第3个参数用于设置默认值。当第2个参数指定的成员不存在时,getattr函数会返回第3个参数指定的默认值。

与getattr函数对应的是setattr函数,该函数用于设置对象中成员的值。setattr函数有三个参数,前两个参数与getattr函数也完全相同,第3个参数用于指定对象成员的值。

# 如果c对象中有name属性,则更新该属性的值,如果没有name属性,会添加一个新的name属性
setattr(c,'name','new value')

[例 8.7] 本例创建了一个myclass类,该类中定义了两个方法method1和default。在调用myclass对象中的方法时,会首先判断调用的方法是否存在。使用getattr函数判断方法是否在对象中存在时,将default方法作为默认值。

class myclass:
    def method1(self):
        print('method1')
    def default(self):
        print('default')



my = myclass()

# 判断method1是否在my中存在

if hasattr(my,'method1'):
    my.method1()
else:
    print('method1方法不存在')


# 判断method2是否在my中存在

if hasattr(my,'method2'):
    my.method2()
else:
    print('method2方法不存在')


# 从my对象中获取method2方法,如果method2方法不存在,返回default方法作为默认值
method = getattr(my,'method2',my.default)

# 如果method2方法不存在,那么method方法实际上就是my.default方法

method()

def method2():
    print('动态添加的method2')


# 通过setattr函数将method2函数作为method2方法的值添加到my对象中
# 如果method2方法在my中不存在,那么会添加一个新的method2方法,相当于动态添加method2方法

setattr(my,'method2',method2)

# 调用my对象中的method2方法
my.method2()

输出结果:

method1
method2方法不存在
default
动态添加的method2

猜你喜欢

转载自blog.csdn.net/weixin_45086637/article/details/90958948
今日推荐