码迷,mamicode.com
首页 > 编程语言 > 详细

python面向对象的约束和自定义异常

时间:2018-09-02 00:08:24      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:写入   操作   message   数据类型   opened   metaclass   play   code   抽象   

基于人为来约束: 即人为主动抛出异常

技术分享图片
class BaseMessage(object):
    def send(self,x1):
        """
        必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑。
        """
        raise NotImplementedError(".send() 必须被重写.")

class Email(BaseMessage):
    def send(self,x1):
        """
        必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑。
        """
        print(发送邮件)

obj = Email()
obj.send(1)
View Code

当派生类中没有约束的方法时,就会执行基类中的方法,从而触发异常

抽象类和抽象方法:

技术分享图片
from abc import ABCMeta,abstractmethod
class Base(metaclass=ABCMeta): # 抽象类
    def f1(self):
        print(123)
    @abstractmethod
    def f2(self):   # 抽象方法
        pass
class Foo(Base):
    def f2(self):
        print(666)
obj = Foo()
obj.f1()
View Code

抽象类可以把子类中共有的方法写入,提高复用性,但是这种方式在python中并不常用.

补充: 在java和c中存在接口,而python中不存在,所以用抽象类+抽象方法来伪造。

接口是一种数据类型,主要用于约束派生类中必须实现制定的方法;即接口中的方法中不允许写入代码。

自定义异常:

python的异常分为两种.
1、内建异常,就是python自己定义的异常。
2、不够用,用户自定义异常,
我们可以看到python的异常有个大基类。然后继承的是Exception。所以我们自定义类也必须继承Exception。

技术分享图片
class KeyError(Exception):
    pass

class MyException(Exception):
    def __init__(self,code,msg):
        self.code = code
        self.msg = msg
try:
    raise MyException(1000,操作异常)

except KeyError as obj:
    print(obj,1111)
except MyException as obj:
    print(obj.code,obj.msg)
except Exception as obj:
    print(obj,3333)
View Code

 

python面向对象的约束和自定义异常

标签:写入   操作   message   数据类型   opened   metaclass   play   code   抽象   

原文地址:https://www.cnblogs.com/feifeifeisir/p/9571812.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!