本文實(shí)例講述了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()補(bǔ)充:函數(shù)名和當(dāng)做變量使用
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結(jié)尾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 抽象類、抽象方法的實(shí)現(xiàn)示例
由于python 沒有抽象類、接口的概念,所以要實(shí)現(xiàn)這種功能得abc.py 這個(gè)類庫,具體方式如下
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)#實(shí)現(xiàn)類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 如果子類不實(shí)現(xiàn)父類的_getBaiduHeaders方法,則拋出TypeError: Can't instantiate abstract class BaiduHeaders with abstract methods 異常
希望本文所述對大家Python程序設(shè)計(jì)有所幫助。
新聞熱點(diǎn)
疑難解答
圖片精選