1. 程式人生 > >面向對象【進階篇】

面向對象【進階篇】

ise 實現 異常類 通知 pri ted msg 派生類 try

1. 約束 
建議使用:
class BaseMessage(object):
def send(self):
"""
必須繼承BaseMessage,然後其中必須編寫send方法。用於完成具體業務邏輯。
"""
raise NotImplementedError(".send() 必須被重寫.")
# raise Exception(".send() 必須被重寫.")



BaseMessage類用於約束,約束其派生類:保證派生類中必須編寫send方法,不然執行可能就會報錯。


class BaseMessage(object):
def send(self):
"""
必須繼承BaseMessage,然後其中必須編寫send方法。用於完成具體業務邏輯。
"""
raise Exception()

class Email(BaseMessage):
def send(self):
pass # 發送郵件

def f1(self):
pass

def f2(self):
pass
class Wechat(BaseMessage):
def send(self):
pass # 發送微信

def f1(self):
pass

def f2(self):
pass
class Msg(BaseMessage):
def send(self):
pass # 發送短信

def f1(self):
pass

def f2(self):
pass


def func(arg):
"""
報警通知的功能
"""
arg.send()


obj = Msg()
func(obj)

Python:

類:
class Foo:
pass
抽象類和抽象方法:

Java、C#:


class Foo:
def f1(self):
pass

def f2(self):
pass # 可人為拋出異常。

class Bar(Foo):
def f1(self):
pass

抽象類,約束,約束繼承它的派生類必須實現它其中的抽象方法。
abstact class Foo:
def f1(self):
print(1,3,4)

abstact def f2(self):pass

class Bar(Foo):
def f2(self):
print(‘111‘)



接口,接口中不允許在方法內部寫代碼,只能約束繼承它的類必須實現接口中定義的所有方法。
interface IFoo:

def f1(self,x1):pass

def f2(self,x1):pass

interface IBar:

def f3(self,x1):pass

def f4(self,x1):pass

class Foo(IFoo,IBar):# 實現了2個接口

def f1(self,x1):pass

def f2(self,x1):pass

def f3(self,x1):pass

def f4(self,x1):pass

總結:
1. 什麽是接口以及作用?
接口時一種數據類型,主要用於約束派生類中必須實現指定的方法。
Python中不存在,Java和C# 中是存在的。
2. Python中使用過什麽來約束呢?
- 抽象類+抽象方法,編寫上麻煩。
- 人為主動拋出異常

3. 約束時,拋出的異常是否可以用其他的?
不專業:raise Exception(".send() 必須被重寫.")
專業:raise NotImplementedError(".send() 必須被重寫.")

4. 以後看代碼,揣摩心思

5. 寫代碼:
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)


6. 應用場景:
多個類,內部都必須有某些方法時,需要使用基類+異常進行約束。
學員管理程序:

class IBase:
def login():
raise NotImplementedError(".send() 必須被重寫.")

class Student:
def login(self):
pass

def score(self):
pass

class Teacher:
def login(self):
pass

def exam(self):
pass

class Manager(self):
def login(self):
pass

....


2. 自定義異常

# 知識點:如何自定義異常類?
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,2222)
except Exception as obj:
print(obj,3333)


3. 加密


關鍵詞:撞庫

加鹽


4. 日誌 logging

為什麽要有日誌?
給開發人員看,用於排查錯誤。

面向對象【進階篇】