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

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

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)

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

抽象类和抽象方法:

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()

抽象类可以把子类中共有的方法写入, 提高复用性, 但是这种方式在 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)