1. 程式人生 > >Cris 的Python筆記(十二):面向物件其他細節語法

Cris 的Python筆記(十二):面向物件其他細節語法

文章目錄

1、類屬性,例項屬性,例項方法,類方法,靜態方法

class A(object):

    '''
        類屬性:定義並初始化在類中,可以通過類和例項去訪問,但是隻能通過類修改
        例項可以使用同名的例項屬性進行覆蓋
    '''
    country = "China"

    def __init__(self):
        # 例項屬性:只能通過例項訪問和修改,只屬於某個特定的例項,類無法訪問和修改
self.name = "cris" # 例項方法:類中定義並且以 self 處於第一個引數位置,該方法被呼叫時,自動將呼叫該引數的例項傳入作為第一個引數 # 也可以通過類去呼叫 def test(self): print("test!") # 類方法:使用 @classmethod 註解的方法,類方法的第一個引數預設定義為 cls,就是當前的 class 物件 # 可以通過類或者例項去呼叫 @classmethod def function(cls): print("this is class method"
, cls) # 靜態方法:不需要指定預設引數,也不會自動傳遞,可以通過類和例項呼叫 # 只是儲存到當前類的一個函式,和當前類關係不大,一般作為工具方法 @staticmethod def haha(): print('static method') print(A.country) # China a = A() print(a.country) # China a.country = 'Japan' print(A.country) # China print(a.country) # Japan a.test(
) # test! # A.test() # 報錯 A.test(a) # test! A.function() # this is class method <class '__main__.A'> a.haha() # static method

2、垃圾回收和特殊/魔術方法

# 沒有變數指向的物件可以稱之為垃圾,Python 會自動將其銷燬,並且呼叫物件的 __del__ 方法


class A(object):
    def __del__(self):
        print(f'{self} is deleting~')


a = A()
a = None    # <__main__.A object at 0x0000026FD678B0F0> is deleting~

# 特殊方法(魔術方法):__ 開頭,__ 結尾
# 一般不需要我們手動呼叫,一般都是自動呼叫


class Student(object):

    # 初始化方法
    def __init__(self, name, age):
        self._name = name
        self._age = age

#  類似 Java 的toString 方法,列印物件時被呼叫
    def __str__(self):
        return f'{self._name} --- {self._age}'

# 對當前物件使用repr 函式時呼叫:指定物件在互動模式中輸出的結果
    def __repr__(self):
        return "hehe"

# 大於方法
    def __gt__(self, other):
        return self._age > other._age
# 小於

    def __lt__(self, other):
        return self._age > other._age

    def __bool__(self):
        return self._age > 20


'''
    __eq__;__ge__;__le__;__ne__;
    __len__(self):獲取長度
    __bool__(self):返回 bool 型別的資料,可以用於自定義判斷(用於 if 語句)

    # object.__add__(self, other)
    # object.__sub__(self, other)
    # object.__mul__(self, other)
    # object.__matmul__(self, other)
    # object.__truediv__(self, other)
    # object.__floordiv__(self, other)
    # object.__mod__(self, other)
    # object.__divmod__(self, other)
    # object.__pow__(self, other[, modulo])
    # object.__lshift__(self, other)
    # object.__rshift__(self, other)
    # object.__and__(self, other)
    # object.__xor__(self, other)
    # object.__or__(self, other)
'''

s1 = Student('cris', 16)
s2 = Student('james', 22)
print(s2)    # <__main__.Student object at 0x000002BF08408A20>
print(s2)    # james --- 22

print(s1 > s2)  # False
print(s2 > s1)  # True
print(bool(s1))  # False
print(bool(s2))  # True