Cris 的Python筆記(十二):面向物件其他細節語法
阿新 • • 發佈:2018-11-19
文章目錄
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