1. 程式人生 > >字段 | 方法 | 屬性 | 類的成員 | Python

字段 | 方法 | 屬性 | 類的成員 | Python

exception 行修改 靜態 st3 per setter pri static 間接

# ----------------------------------------- 字段
class Class:
    # 靜態字段,屬於類
    # 已經創建,並且存放在類裏,而不是每創建一個對象創建一次;
    country = 中國

    def __init__(self, name):
        # 普通字段-->> 保存在創建的對象裏
        self.name = name

    # 普通方法-->> 保存在類裏
    def show(self):
        print(self.name)

# 實例化對象
obj = Class(Mic) print(obj.name) obj.show() # 通過類對象獲取靜態字段 print(Class.country) # print(Class.name) # 普通字段存放在對象中,無法通過類訪問; # 對象可以通過類對象指針(引用)訪問到靜態屬性 print(obj.country)
# ------------------------------ 方法
class MethodTest():
    # 普通方法
    def test1(self):  # self指創建的對象
        print(run-------1
) # 靜態方法 @staticmethod def test2(): # 這個時候self就不是必須的,當然你要是寫了,就需要傳入一個參數 print(run-------2) # 類方法 @classmethod def test3(cls): # 這裏傳入的cls參數是python自動傳入的類名 print(cls) print(run-------3) # ----------------- 調用普通方法 # 1.創建一個對象,通過對象間接訪問類中的普通方法 obj = MethodTest() obj.test1()
# 2.通過來直接訪問普通方法,但是前提是先創建一個對象 # 因為普通方法第一個參數self就代指創建的對象 MethodTest.test1(obj) # ------------------ 調用靜態方法 # 類直接調用,類似於寫了一個函數,畢竟創建一個對象會占用內容 MethodTest.test2() # ---------------- 調用類方法 MethodTest.test3() # 分別什麽時候使用? # 1.我們需要用到對象中的值,就使用普通方法; # 2.如果不需要任何對象中的值,就使用靜態方法; # 3.其實,如果需要在靜態方法中用到類名,作為參數傳入就相當於類方法; # 就是說,類方法完全可以通過靜態方法構造出來 # 而且很少需要在方法中用到類名,所以沒必要使用類方法
# ------------------------------屬性
class Attr():
    @property
    def test4(self):
        print(run-------4)
        return run4

    @test4.setter
    def test4(self, param):
        print(param)

    @test4.deleter
    def test4(self):
        print(delete------4)

obj = Attr()
# obj.test4()  # 報錯
obj.test4
print(obj.test4)

# 賦值
obj.test4 = change_val
# print(obj.test4)  # 報錯

# 如果一定要賦值呢?
print(obj.test4)

# 刪除
del obj.test4
# >>> 其實並沒有對這個字段進行修改,
# 只是通過這樣的操作,執行對應裝飾器下的方法;
# 就是一個對應關系;
# ----------------- 用property裝飾器,完成分頁效果
class Paginator(object):
    def __init__(self, current_page):
        try:
            p = int(current_page)
        except Exception as e:
            p =1

        self.page = p

    @property
    def start(self):
        val = (self.page-1) * 10
        return val

    @property
    def end(self):
        val = self.page*10
        return val


a = list()
for i in range(1000):
    a.append(i)

while True:
    p = input(請輸入查看的頁面:)
    obj = Paginator(p)
    print(a[obj.start:obj.end])
# --------------------------- 用property()完成上面的效果

class ClassFunc():
    def test1(self):
        return Mic

    def test2(self, param):
        print(param)

    def test3(self):
        print(del)

    per = property(fget=test1, fset=test2, fdel=test3)


obj = ClassFunc()
# 1.調用方法
# ret = obj.per
# print(ret)

# 2.賦值
# obj.per = ‘Mic‘

# 3.刪除
del obj.per

字段 | 方法 | 屬性 | 類的成員 | Python