面向物件程式設計/靜態與動態
外觀
< 面向物件程式設計
在面向物件程式語言中,存在靜態方法和動態方法以及屬性。以下是主要區別。
- 無法訪問自身或其他類的動態方法
- 無法訪問自身或其他類的動態屬性
- 由於它們是靜態的,因此只例項化一次,並且不同的例項始終相同
- 可以訪問自身或其他類的動態方法
- 可以訪問自身或其他類的動態屬性
- 可以多次例項化,每次都使用自己的唯一例項,處理可能唯一的資料
class Values():
def __init__(self, value):
self.value = value
def squared(self, value):
self.value = self.multiply_value(value, value)
@staticmethod
def multiply_value(value1, value2):
return value1 * value2
在上面的程式碼中,您可以看到方法squared()將self作為引數。這使它可以訪問類的其他屬性和方法。正如您所見,它接收一個初始傳入值,對其進行一些修改,然後將類的value屬性設定為計算結果。由於它可以訪問其他類的方法/屬性並修改類狀態,因此它被認為是動態方法。
另一方面,您可以看到multiply_value()沒有self作為引數。此方法所做的只是將兩個傳入值相乘並返回結果。它從不需要訪問其類的屬性或方法,它只執行計算。由於它不需要訪問其類的唯一資料,因此它只加載一次,因為任何其他例項都將是相同的,並且會浪費記憶體,因此這是一種靜態方法。