@classmethod
被classmethod裝飾的方法稱為類方法,他是屬于類的,而不是實體化物件的,它的第一個引數不是代表實體化物件的 self 而是類表示類本身的 cls
也就是說他的呼叫可以直接使用類呼叫,它也可以直接的修改類屬性,總而言之它是屬于類的或者操作是對類而言的,它的呼叫不需要實體化,
# 例子
class Test(object):
count = 0
@classmethod
def set_count(cls, value):
if isinstance(value, int) and 0 < value < 10:
cls.count = value
@classmethod
def get_count(cls):
return cls.count
Test.set_count(5)
print(Test.get_count())
@staticmethod
靜態方法, 相當于定義在類內部的普通方法,只是需要通過類或物件來進行呼叫,他不需要傳入self或cls,也就是說它的第一個變數沒有特殊的含義,
原則上,他也不能使用任何類或者實體的屬性和方法,
靜態方法原則上是屬于類的,但是實際上和類并沒有太多的關系,只是封裝在類的內部僅此而已,將它封裝在類中,依托類的命名空間來管理,更有利于維護代碼,
# 例子
class Test(object):
@staticmethod
def sum(num1, num2): # 第一個引數不是 self 或 cls
return num1 + num2
print(Test.sum(1, 4)) # 也不需要實體化 但是實體化物件也可以呼叫靜態方法
@property
以裝飾器形式使用property,被裝飾得方法將成為只讀的方法,可以像訪問屬性一樣訪問方法,得到的值為方法的回傳值,需要改寫這個屬性的話需要用裝飾器@屬性名.setter裝飾同名方法,
class Test(object):
def __init__(self):
self._count = 2
@property # 允許以屬性的方式執行方法,在外的表現為屬性,本質上是一個方法,
def count(self):
return self._count
@count.setter # 定義方法(屬性)的設定行為,<這樣能檢查傳入的值 是否是期望的,在這里做檢查,>
def count(self, value):
""" 如果沒有這個方法,那么屬性是只讀的,也就是不允許賦值 """
if isinstance(value, int):
self._count = value
@count.deleter # 定義方法(屬性)的洗掉行為,
""" 如果沒有定義這個方法,那么屬性是不允許洗掉的 """
def count(self):
self._count = 0
a = Test()
a.count = 100
print(a.count)
del a.count
print(a.count)
以函式的方式使用property
class Test(object):
def __init__(self):
self._count = 2
def get_count(self):
return self._count
def set_count(self, value):
if isinstance(value, int):
self._count = value
def del_count(self):
self._count = 0
count = property(fset=set_count,
fget=get_count,
fdel=del_count,
doc="docs for count."
)
a = Test()
a.count = 100
print(a.count)
del a.count
print(a.count)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/119154.html
標籤:Python
上一篇:介面類 和 抽象類
下一篇:關于動態創建控制元件的幾個問題
