您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關如何在Python中使用自定義類,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
1、簡單易用,與C/C++、Java、C# 等傳統語言相比,Python對代碼格式的要求沒有那么嚴格;2、Python屬于開源的,所有人都可以看到源代碼,并且可以被移植在許多平臺上使用;3、Python面向對象,能夠支持面向過程編程,也支持面向對象編程;4、Python是一種解釋性語言,Python寫的程序不需要編譯成二進制代碼,可以直接從源代碼運行程序;5、Python功能強大,擁有的模塊眾多,基本能夠實現所有的常見功能。
抽象方法
class Person(): def say(self): pass class Student(Person): def say(self): print("i am student")
抽象類: 包含抽象方法的類
抽象類可以包含非抽象方法
抽象類可以有方法和屬性
抽象類不能進行實例化
必須繼承才能使用,且繼承的子類必須實現所有抽象方法
import abc class Person(metaclass=abc.ABCMeta): @abc.abstractmethod def say(self): pass class Student(Person): def say(self): print("i am student") s = Student() s.say()
補充:函數名和當做變量使用
class Student(): pass def say(self): print("i am say") s = Student() s.say=say s.say(9)
組裝類
from types import MethodType class Student(): pass def 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): pass t = 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中使用自定義類有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。