python 抽象类的意义_python抽象类有什么用

抽象类,就像是类和接口的混合体,具有接口的特性,在python中利用第三方abc模块,实现抽象类。

ea47b9773617476364e48fd1fff5a45f.jpg

抽象方法不存在重写的问题,却有实现的问题(推荐学习:Python视频教程)

如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。

含有抽象方法的类一定是抽象类,但是抽象类不一定含有抽象方法,此时也没有任何意义了。

在python中接口(抽象类)常用于协同工作。

注意:在python中,我们不以有无执行体来区分是否是抽象类,而是根据是否有@abc.abstractmethod装饰器作为标准。#注意:不能直接实例化抽象类!!!

#示例程序:

import abc #导入abc模块

class InMa(metaclass=abc.ABCMeta): #定义抽象方法

@abc.abstractmethod #定义抽象方法

def login(self):

pass

@abc.abstractmethod

def zhuce(self):

pass

class Login(InMa): #继承抽象类

def __inti__(self,name,pwd):

self.name = name

self.password = pwd

def login(self): #实现抽象方法功能

if self.name == "qq" and self.password == "111":

print("恭喜登录成功")

else:

print("登录失败")

class Zc(Login):

def __init__(self,name,pwd):

self.name = name

self.password = pwd

def zhuce(self):

print("恭喜注册成功")

print("username:",self.name)

print("password:",self.password)

#实例对象

ren = Zc("Jaue","qqq")

ren.zhuce()

更多Python相关技术文章,请访问Python教程栏目进行学习!

以上就是python抽象类有什么用的详细内容,更多请关注jquery中文网其它相关文章!

本文原创发布jQuery中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的抽象基类(Abstract Base Class,简称ABC)是一种特殊的类,它定义了一组抽象方法,这些方法必须在子类中实现。ABC的一个主要用途是为了检查子类是否符合某个接口的规范。 在ABC中,可以使用`__subclasshook__`方法来判断一个类是否是该ABC的虚拟子类。具体来说,如果一个类没有直接继承该ABC,但是它的基类中有`__subclasshook__`方法,而且该方法返回True,则该类就被视为该ABC的虚拟子类。 下面是一个例子,我们定义了一个ABC `MyABC`,其中定义了一个抽象方法`my_method`。然后定义了一个普通类`MyClass`,它继承自`object`,并且实现了`my_method`方法。最后,我们在`MyClass`中定义了`__subclasshook__`方法,它判断一个类是否实现了`my_method`方法。 ```python from abc import ABC, abstractmethod class MyABC(ABC): @abstractmethod def my_method(self): pass class MyClass(object): def my_method(self): print("MyClass.my_method() is called") @classmethod def __subclasshook__(cls, C): if cls is MyABC: if hasattr(C, 'my_method'): return True return NotImplemented print(issubclass(MyClass, MyABC)) # True ``` 在上面的代码中,我们使用`issubclass`函数来检查`MyClass`是否是`MyABC`的子类。由于`MyClass`实现了`my_method`方法,而且定义了`__subclasshook__`方法,因此`issubclass(MyClass, MyABC)`返回True。 接下来我们实现一个自己的虚拟子类。我们定义一个普通类`MyClass2`,它没有直接继承自`MyABC`,但是它的基类中定义了`__subclasshook__`方法,该方法判断一个类是否实现了`my_method`方法。然后我们通过`register`方法将`MyClass2`注册为`MyABC`的虚拟子类。 ```python class MyClass2(object): def my_method(self): print("MyClass2.my_method() is called") @classmethod def __subclasshook__(cls, C): if cls is MyABC: if hasattr(C, 'my_method'): return True return NotImplemented MyABC.register(MyClass2) print(issubclass(MyClass2, MyABC)) # True ``` 在上面的代码中,我们使用`register`方法将`MyClass2`注册为`MyABC`的虚拟子类。然后我们再次使用`issubclass`函数来检查`MyClass2`是否是`MyABC`的子类。由于`MyClass2`实现了`my_method`方法,并且已经被注册为`MyABC`的虚拟子类,因此`issubclass(MyClass2, MyABC)`返回True。 总之,`__subclasshook__`方法是ABC中的一个重要方法,它可以让我们方便地判断一个类是否符合某个接口的规范。同时,我们也可以通过`register`方法将一个普通类注册为ABC的虚拟子类。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值