0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python类接口和抽象超类分析

jf_78858299 来源:梯阅线条 作者:小梯子 2023-04-06 15:07 次阅读

1.1 导入模块执行class语句

python导入模块时会执行class语句及主体内的顶层语句。

示例

# test.py
class MyClass:
   print('MyClass')
# cmd执行下面语句
E:\\documents\\F盘>python
>>> import test
MyClass

1.2 pytho类接口技术

python类接口技术通过继承实现。

# test.py
class Super:
   '''定义一个超类。
  定义一个method方法。
  定义一个delegate方法,方法内调用子类定义的action方法。
  '''
   def method(self):
       print('in Super.method')
   def delegate(self):
       '''调用子类定义的action'''
       self.action()
   
class Inheritor(Super):pass

class Replacer(Super):
   '''定义 Replacer 继承 Super
  替换超类的 method 方法
  '''
   def method(self):
       print('in Replacer.method')

class Extender(Super):
   '''定义 Extender 继承 Super
  调用超类的 method 方法, 并且进行扩展
  '''
   def method(self):
       print('Begin Extender.method')
       Super.method(self)
       print('End Extender.method')
       
class Provider(Super):
   '''定义 Provider 继承 Super
  实现超类 delegate 内调用的 action 方法
  '''
   def action(self):
       print('in Provider.action')
       
if __name__ == '__main__':
   for cls in (Inheritor,Replacer,Extender,Provider):
       print('\\n{}....'.format(cls.__name__))
       cls().method()
       
   print('\\nProvider')
   p = Provider()
   p.delegate()

''' 运行结果

E:\\documents\\F盘>python test.py

Inheritor....
in Super.method

Replacer....
in Replacer.method

Extender....
Begin Extender.method
in Super.method
End Extender.method

Provider....
in Super.method

Provider
in Provider.action
'''

1.3 python抽象超类

python类的部分行为由子类提供,则为抽象超类。

1.3.1 调用方法时触发提示

显式要求子类必须实现抽象超类的方法:

(1) 方法一,在超类方法用assert False

(2) 方法二,在超类方法用 raise NotImplementedError

未实现,则在实例调用方法时触发报错提示。

子类和超类都未提供方法 ,报 has no attribute

>>> class AbsSuper:
   def delegate(self):
       self.action()
       
>>> class Provider(AbsSuper):pass
>>> p=Provider()
>>> p.delegate()
Traceback (most recent call last):
 File ", line 1, in

在超类方法用assert False

>>> class AbsSuper:
   def delegate(self):
       self.action()
   def action(self):
       assert False,'子类必须定义 action'

       
>>> class Provider(AbsSuper):pass

>>> Provider().delegate()
Traceback (most recent call last):
 File ", line 1, in

在超类方法用raise NotImplementedError

>>> class AbsSuper:
   def delegate(self):
       self.action()
   def action(self):
       raise NotImplementedError('子类必须定义 action')
>>> class Provider(AbsSuper):pass

>>> Provider().delegate()
Traceback (most recent call last):
 File ", line 1, in

1.3.2 创建实例时触发提示

(1) 带有@abstractmethod修饰的方法为抽象方法。

(2) 带有抽象方法的类不能进行实例化。

(3) 超类有抽象方法时,子类必须重写超类的抽象方法。

(4) 未重写,则创建实例时触发报错提示。

抽象方法定义:

(1) python3:超类头部括号送metaclass**=**ABCMeta。

(2) python2:超类主体定义**metaclass****=**ABCMeta。

(3) 用@abstractmethod修饰方法。

python3示例

>>> from abc import ABCMeta,abstractmethod
>>> class MySuper(metaclass=ABCMeta):
   def delegate(self):
       self.action()
   # @abstractmethod 为抽象方法,子类必须重写
   @abstractmethod
   def action(self):
       pass  # 抽象方法在父类通常留空,用pass进行占位

   
>>> ms=MySuper()
Traceback (most recent call last):
 File "
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口技术
    +关注

    关注

    1

    文章

    268

    浏览量

    41240
  • Class
    +关注

    关注

    0

    文章

    52

    浏览量

    19522
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83467
收藏 人收藏

    评论

    相关推荐

    Han千兆模块安徽7提升大时代数据传输安全性可靠

    抑制串扰和噪声方面保持较高标准。6是目前在网络技术中应用最广泛的工业标准。  浩亭不断扩展Han-Modular?系列,致力于满足市场对工业连接器模块化接口不断增长的需求。通过整合新技术以及不断改进现有解决方案,使模块化
    发表于 10-09 10:00

    python数据分析

    Python之所以这么流行,这么好用,就是因为Python提供了大量的第三方的库,开箱即用,非常方便,而且还免费哦,学Python的同学里估计有30%以上是为了做数据分析师或者数据挖掘
    发表于 05-10 15:18

    《Visual C# 2005开发技术》抽象类、多态及接口.pdf

    《Visual C# 2005开发技术》抽象类、多态及接口.pdf[hide][/hide]
    发表于 06-24 19:54

    labview2018怎么调用python里的函数

    一个python程序里面有里面有函数用labview2018怎么调用里的函数啊,用labview2018调用直接写函数名不行
    发表于 04-06 13:29

    Python如何实现模糊动态聚

    利用Python实现模糊动态聚
    发表于 06-02 17:38

    如何使用Python? 优势有哪些?

      Python是一种面向对象的高级语言,因此类对于Python非常重要。是一个空间,在该空间中变量(属性/方法)分别存储。运算符' . '用于调用的属性和方法。
    发表于 07-30 18:08

    抽象工厂模式的创建

    抽象工厂模式(Abstract Factory Pattern)提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的抽象工厂模式又称为Kit模式,属于对象创建型模式。
    发表于 11-04 06:13

    Python中的方法、实例方法和静态方法?

    Python中实例属性和实例方法Python中类属性和方法Python中调用方法
    发表于 11-05 06:25

    请问Python中的方法、实例方法和静态方法是什么?

    Python中的方法、实例方法和静态方法
    发表于 11-09 07:13

    LabVIEW OOP之接口 (2020)

    大家好,我是荣小菜,也可以叫我Richie,腊月29啦,马上就要出门抢购啦,今天就简单讲一点LabVIEW OOP的东西吧。首先介绍些基本概念:是对对象的抽象接口是对行为的抽象如果
    发表于 02-10 11:04

    抽象接口不是通过底层模块的来实现吗

    依赖于底层模块呀!这是怎么回事呢?区分设计模块上的依赖与物理功能上的依赖的语义不同现实中抽象模块功能是通过低层模块实现的(继承实现),但从依赖关系上讲是低层模块依赖于抽象模块,因为父接口
    发表于 09-17 07:25

    python的理解与使用

    python的理解与使用1. 通俗理解(英文名 class),是具有相同特性(属性)和行为(方法)的对象(实例)的抽象模板。从定义上来
    发表于 03-07 16:51

    python静态方法与方法

    python静态方法与方法1. 写法上的差异类的方法可以分为:静态方法:有 staticmethod 装饰的函数方法:有 classmethod 装饰的函数实例方法:没有任何装饰器的普通函数举个
    发表于 03-07 16:56

    python的继承

    python的继承的继承,跟人类繁衍的关系相似。被继承的称为基(也叫做父),继承而得的
    发表于 03-08 16:40

    python的多态和的property属性

    python的多态多态,是指在同一型下的不同形态。比如下面这段代码class People: def speak(self):passclass American(People): def
    发表于 03-09 16:38