本文實例講述了Python抽象和自定義類定義與用法。分享給大家供大家參考,具體如下:
抽象方法
class Person(): def say(self): passclass Student(Person): def say(self): print("i am student")
抽象類: 包含抽象方法的類
抽象類可以包含非抽象方法 抽象類可以有方法和屬性 抽象類不能進行實例化 必須繼承才能使用,且繼承的子類必須實現所有抽象方法import abcclass Person(metaclass=abc.ABCMeta): @abc.abstractmethod def say(self): passclass Student(Person): def say(self): print("i am student")s = Student()s.say()
補充:函數名和當做變量使用
class Student(): passdef say(self): print("i am say")s = Student()s.say=says.say(9)
組裝類
from types import MethodTypeclass Student(): passdef say(self): print("i am say")s = Student()s.say=MethodType(say,Student)s.say()
元類
# 類名一般為MetaClass結尾class StudentMetaClass(type): def __new__(cls, *args, **kwargs): print("元類") return type.__new__(cls, *args, **kwargs)class Teacher(object, metaclass=StudentMetaClass): passt = Teacher()print(t.__dict__)
附:python 抽象類、抽象方法的實現示例
由于python 沒有抽象類、接口的概念,所以要實現這種功能得abc.py 這個類庫,具體方式如下
from abc import ABCMeta, abstractmethod#抽象類class Headers(object): __metaclass__ = ABCMeta def __init__(self): self.headers = '' @abstractmethod def _getBaiduHeaders(self):pass def __str__(self): return str(self.headers) def __repr__(self): return repr(self.headers)#實現類class BaiduHeaders(Headers): def __init__(self, url, username, password): self.url = url self.headers = self._getBaiduHeaders(username, password) def _getBaiduHeaders(self, username, password): client = GLOBAL_SUDS_CLIENT.Client(self.url) headers = client.factory.create('ns0:AuthHeader') headers.username = username headers.password = password headers.token = _baidu_headers['token'] return headers
如果子類不實現父類的_getBaiduHeaders
方法,則拋出TypeError: Can't instantiate abstract class BaiduHeaders with abstract methods 異常
更多關于Python相關內容感興趣的讀者可查看本站專題:《Python面向對象程序設計入門與進階教程》、《Python數據結構與算法教程》、《Python函數使用技巧總結》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》
希望本文所述對大家Python程序設計有所幫助。
新聞熱點
疑難解答