python 中约束写法有两种 1 常用的通过继承关系主动抛出异常 2 通过抽象类+抽象方法
1 常用的通过继承关系主动抛出异常写法
在本send方法中报错不会抛出异常, class BaseMessage(object): def send(self): """ 必须继承BaseMessage,然后其中必须编写send方法。用于完成具体业务逻辑。 """ raise NotImplementedError(".send() 必须被重写.") # 主动抛异常NotImplementedError,用exception也行但显得不专业 # raise Exception(".send() 必须被重写.") class Email(BaseMessage): # 继承 BaseMessage 必须约束有send方法才行 def send(self): pass # 发送邮件类 def f1(self): pass def f2(self): pass class Wechat(BaseMessage): # 继承 BaseMessage 必须约束有send方法才行 def send(self): pass # 发送微信类 def f1(self): pass BaseMessage类用于约束,约束其派生类:保证派生类中必须编写send方法,不然执行可能就会报错。
2 通过抽象类+抽象方法 (不常用因为编写麻烦)
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()
加密
加密是不可逆的,为了防止撞库 必须有加盐操作
import hashlib # 导入hashlib 模块 SALT = b'2erer3asdfwerxdf34sdfsdfs90' # 盐 盐必须是字节码 def md5(pwd): # 传入密码 # 实例化对象 加盐 obj = hashlib.md5(SALT) # 写入要加密的字节 obj.update(pwd.encode('utf-8')) # 获取密文 return obj.hexdigest() # 21232f297a57a5a743894a0e4a801fc3 # 66fbdc0f98f68d69cd458b0cee975fe3 user = input("请输入用户名:") pwd = input("请输入密码:") if user == 'oldboy' and md5(pwd) == 'c5395258d82599e5f1bec3be1e4dea4a': print('登录成功') else: print('登录失败')