速戰速決 Python - python 類: 基礎

速戰速決 Python https://github.com/webabcd/PythonSample
作者 webabcd

速戰速決 Python - python 類: 基礎

示例如下:

class/class1.py

class Class1:

    # 雙下劃線開頭用於定義私有屬性(外部不能調用,子類也不能調用)
    __id = ""
    
    # 定義公共屬性
    country = ""

    # 通過 __init__ 定義構造函數
    # 第一個參數必須是 self(調用時不需傳此參數,此參數的名稱可以任意指定)
    def __init__(self, name, age):
        # 定義公共屬性,並賦值
        self.name = name
        # 定義公共屬性,並賦值
        self.age = age
        
        self.__id = "0001"

    # 定義公共函數
    # 第一個參數必須是 self
    def toString(self):
        return self.__getString()

    # 雙下劃線開頭用於定義私有函數(外部不能調用,子類也不能調用)
    # 第一個參數必須是 self(調用時不需傳此參數,此參數的名稱可以任意指定)
    def __getString(self):
        return f"id:{self.__id}, name:{self.name}, age:{self.age}, country:{self.country}"

    # 定義 [] 方式的操作邏輯
    __dict = {}
    def __setitem__(self, name, value): 
        self.__dict[name] = "myvalue_" + value 
    def __getitem__(self, name): 
        if self.__dict.__contains__(name):
            return self.__dict[name]
        return None
    def __delitem__(self, name): 
        del self.__dict[name] 

class/class2.py

class Class2:

    def __init__(self, level):
        self.level = level

class/class3.py

# 從 class1.py 文件中導入 Class1 類
from class1 import Class1
# 從 class2.py 文件中導入 Class2 類
from class2 import Class2

# 類的繼承,支持多繼承
class Class3(Class1, Class2):

    def __init__(self, name, age, level):
        # 調用基類的構造函數
        Class1.__init__(self, name, age)
        Class2.__init__(self, level)

    # 重寫基類的函數
    def toString(self):
        return f"name:{self.name}, age:{self.age}, level:{self.level}"


'''
注:
如果多個基類有相同的函數的話,那麼你調用的時候調用的是哪個呢?
調用的是前面的那個類的函數
比如 class MyClass(a, b, c):
a, b, c 中有相同的函數,那麼你調用會是 a 中的函數
'''

class/demo.py

# 從 class1.py 文件中導入 Class1 類
from class1 import Class1
# 從 class3.py 文件中導入 Class3 類
from class3 import Class3

# 類的使用
a = Class1("webabcd", 30)
a.country = "china"
a.age = 40
print(a.toString()) # id:0001, name:webabcd, age:40, country:china
# 演示如何使用 [] 方式的操作(相關邏輯請看 Class1 類的代碼)
a["a"] = "abc"
print(a["a"]) # myvalue_abc

# 類的使用
b = Class3("webabcd", 40, 100)
b.country = "china"
print(b.toString()) # name:webabcd, age:40, level:100
# 調用基類的函數
print(super(Class3, b).toString()) # id:0001, name:webabcd, age:40, country:china

class/exception.py

# 定義自定義異常類(需要繼承 Exception)
class MyError(Exception):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)

try:
    # 拋出自定義異常
    raise MyError("異常信息")
except MyError as ex:
    print(ex)

速戰速決 Python https://github.com/webabcd/PythonSample
作者 webabcd

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章