一、什麼是定義類的關鍵字
在編程中,定義類的關鍵字是用來聲明並定義一個類的,類是將數據和函數封裝在一起形成的一種類型,通過類來實例化對象。在Python程序中,定義類的關鍵字是 class。class語句可以在模塊級、函數級或在一個類中定義另一個類。
class MyClass: def __init__(self, name): self.name = name def myfunc(self): print("Hello, my name is " + self.name)
在上面的代碼中,定義了一個名為 MyClass 的類,該類有一個構造函數 __init__,它接受一個參數 name,並將其存儲在實例變量 self.name 中。還定義了一個名為 myfunc 的方法,該方法將打印出 self.name 變量的值。
二、類的成員變量
類的成員變量是存儲在類中的變量,可以通過實例訪問。成員變量有兩種類型:實例變量和類變量。實例變量是每個實例唯一的變量,而類變量是所有實例共享的。
class MyClass: class_var = 0 def __init__(self, name): self.name = name MyClass.class_var += 1 def myfunc(self): print("Hello, my name is " + self.name + ", and there are " + str(MyClass.class_var) + " of us.")
在上面的代碼中,定義了一個類變量 class_var,以及一個實例變量 name。構造函數 __init__ 將給定的名稱存儲在實例變量 self.name 中,並增加類變量 MyClass.class_var 的值。方法 myfunc 打印實例的名稱和當前實例數量。
三、類的繼承
類的繼承是指一個類從另一個類獲得其屬性和方法的過程。被繼承的類稱為基類或父類,新類稱為派生類或子類。子類可以覆蓋父類的方法,也可以添加新的方法和屬性。
class MyParentClass: def myfunc(self): print("I am the parent class.") class MyChildClass(MyParentClass): def myfunc(self): print("I am the child class.") my_child = MyChildClass() my_child.myfunc() # output: "I am the child class."
在上面的代碼中,定義了一個父類 MyParentClass 和一個子類 MyChildClass。子類 MyChildClass 通過使用父類的名字來聲明繼承關係。子類覆蓋了父類的 myfunc 方法,打印子類的文本信息。創建 MyChildClass 的實例 my_child 並調用其方法 myfunc。
四、類的多重繼承
多重繼承指一個類從多個基類或父類繼承屬性和方法。Python 支持類的多重繼承。
class MyFirstParentClass: def myfunc(self): print("I am the first parent class.") class MySecondParentClass: def myfunc(self): print("I am the second parent class.") class MyChildClass(MyFirstParentClass, MySecondParentClass): def myfunc(self): print("I am the child class.") my_child = MyChildClass() my_child.myfunc() # output: "I am the child class."
在上面的代碼中,定義了兩個父類 MyFirstParentClass 和 MySecondParentClass,以及一個子類 MyChildClass,該子類繼承了兩個父類的屬性和方法。當子類實例調用方法 myfunc 時,將打印子類的文本信息。
五、類的屬性裝飾器
Python 支持為類的屬性添加裝飾器,這些裝飾器可用於擴展屬性的功能。類的屬性裝飾器有四種:@property、@classmethod、@staticmethod 和 @abstractmethod。
class MyClass: def __init__(self, name): self.name = name @property def myname(self): return self.name @classmethod def myfunc(cls, arg): print("My class: " + cls.__name__ + ", My arg: " + arg) @staticmethod def mystaticfunc(): print("I am a static method.") @abstractmethod def myabstractfunc(self): pass
在上面的代碼中,定義了一個類 MyClass,並使用屬性裝飾器為其添加四個方法:myname、myfunc、mystaticfunc 和 myabstractfunc。其中,myname 方法使用 @property 裝飾器,將 self.name 屬性包裝成一個只讀屬性。myfunc 方法使用 @classmethod 裝飾器,將 cls 參數傳遞給方法,以便在方法中可以使用類的屬性和方法。mystaticfunc 方法使用 @staticmethod 裝飾器,可以在不實例化類的情況下直接使用該方法。myabstractfunc 方法使用 @abstractmethod 裝飾器,定義了一個抽象方法,必須在派生類中實現。
原創文章,作者:EOHWH,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/372661.html