专栏首页编程创造城市Python中类的接口

Python中类的接口

知识回顾:

有关类的多继承

  1. 掌握的是多继承类定义的写法。
  2. 理解类的同名方法的优先级。
  3. __bases__查看一个类的多个继承父类 。

本节知识视频教程

一、接口

开场白要说的其实是在python中没有接口的概念。那么接口是怎样的呢?

接口:理解为一种规范。定义一个接口实际上是一定一个规范,那么一个接口类可以定义多个规范。每个规范实际上是一个函数(方法)名称。

接口的实现:通过具体继承这个接口的类来具体实现。

二、Python中的判断模式

Python中采用可以采用方法判断代替某个接口方法是否存在。下面来开始介绍。

1. hasattr函数

hasatrr(参数1,参数2)函数来判断,如果某个参数1对象中有参数2的方法,那么就返回True,否则返回False

参数1:某个类实例化的对象

参数2:某个方法名称,用字符串类型表示

通过测试,我们知道hasattr函数其实也同样适用于类的属性。

2. getattr函数

getattr(参数1,参数2 [,参数3])

参数1:某个类的对象

参数2:某个类的方法名称,注意这个方法名称不要加小括号

参数3:默认函数,这个方法可以被省略,但是如果被省略的情况下,参数2这个方法名称如果不存在的话,这个函数会直接报异常。如果参数3没有省略,那么这个getattr函数的结果,在参数2不存在的情况下,会返回参数3,使得结果不会报错。注意,参数3在写的时候不要加小括号,一旦加了小括号,参数3这个方法名称就会被自动执行。

这里的参数3中的方法名称不一定是要在类的内部的,也可以是外部自定义的。

同样的,这个函数也可以适用到属性的获取上面。

3. setattr函数

这个函数用来设置对象的默认方法与属性。

setattr(参数1,参数2,参数3)

参数1:某个类的实例化对象。

参数2:需要设置的某个类的新的方法或属性名称。

参数3:对象参数2中的方法或属性名称的具体的值。

如果参数2是一个属性,那么参数3可以直接设置这个属性的值。

如果参数2是一个方法,那么参数3可以设置自定义的某个方法名称,注意这里不要写成字符串的形式,而是直接写某个方法名。

如果参数2中的方法或属性名称与对象原有的方法或属性相同,那么就以新设置的为准。

三、总结强调

1.掌握接口的概念。

2.掌握hasattr判断某个对象是否有某个属性或者方法。

3.掌握getattr函数获取某个对象的方法或属性,并可以给予一个默认值。

4.掌握setattr函数设置某个对象的方法或属性。

本节源代码:

class Person:
    name="老刘"
    def say(self):
        print("中文")
    #假定sing这个方法为默认已知的默认方法
    def sing(self):
        print("唱歌")

def chuiniu():
    print("开始吹牛")
ps=Person()
print(hasattr(ps,"name1"))

#getattr获取某个方法
m=getattr(ps,"say1",chuiniu)
m()

def program():
    print("刘金玉编程")
#setattr设置一个默认方法
setattr(ps,"programming",program)
ps.programming()

#设置相同方法名称的情况
setattr(ps,"say",program)
ps.say()

相关文章:

  1. python应用场景有哪些?岗位工资如何?
  2. 开始了解python语言吧!
  3. html中的<!DOCTYPE html>起到什么作用?前端面试经常考到
  4. python中类和对象
  5. python中函数递归VS循环
  6. python中函数的可变参数

本文分享自微信公众号 - 编程创造城市(bcczcs),作者:刘金玉编程

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python中类的继承和类代码块

    注意:子类继承父类后,我们可以直接实例化子类,那么父类中的属性和方法都可以被子类调用。

    刘金玉编程
  • python中类的多继承

    类似于c++中某个类,一次可以继承多个父类,所有被继承的这些父类的方法和属性都将可以被子类使用。

    刘金玉编程
  • python中函数的可变参数

    print(1,2,"hello","刘金玉编程","编程创造城市",end="$$$")

    刘金玉编程
  • Python3刷题系列(二)

    中文版:https://leetcode-cn.com/problems/3sum/

    用户5473628
  • 使用Filebeat和Logstash集中归档日志

    程序员同行者
  • dataguard中的密码文件管理(r8笔记第39天)

    这篇文章的动力来自于一个朋友的提问,他问我备库的密码文件直接重建可以吗,我说最好还是复制,如果重建可能会有一些潜在的问题,当然这个所谓潜在问题也是自己给自己打的...

    jeanron100
  • 局部变量和常量的性能分析

    java404
  • stm32如何才能正常运行的调试笔记

    想使用野火或者安福来的代码模板来学习这个stm32,毕竟他买使用量挺多的,代码风格尤其是安福来比较好,因此想试试他们的工程,但是弄了好长一段时间,单片机就是不能...

    用户4645519
  • 原来搭建一个属于自己的网站如此简单?半个小时可搞定

    拥有自己的独立网站,做站长,很多人认为很难,既不懂代码也不懂技术没有什么基础。其实不难,代码可以完全不懂,没有建站基础也能很轻松的拥有一个属于自己的网站。

    wordpress建站吧
  • 干货|揭秘四大行业率先抢占小程序红利,小程序运营成关键因素?

    微信小程序在2020年迎来发展黄金期,其在零售、电商、餐饮及生活服务行业的深度应用已融入用户的衣食住行等日常生活,成为“新国民工具”。

    云店加小程序分享

扫码关注云+社区

领取腾讯云代金券