python類的三種方法

2021-08-21 07:35:57 字數 2377 閱讀 9996

python類有三種方法。

1.一般方法,即不加任何修飾的,直接用def定義的方法。如:

in [14]: class a:

...: def a(self):

...: print('一般方法')

...:

in [15]: class_a = a()

in [16]: class_a.a()

一般方法

2.staticmethod方法

經過staticmethod修飾過的類方法無需例項化即可被呼叫,而且該類方法不再需要self作為第一引數。

in [107]: class a:

...: @staticmethod

...: def foo(x):

...: print(x)

...:

in [108]: a.foo(1)

1

這樣做的好處是,以後重構類的時候不需要修改init函式,只要額外新增需要處理的函式,然後使用@staticmethod修飾即可。

classmethod 修飾的方法。類方法經 classmethod 修飾後無需例項化即可被呼叫,而且該類方法的第一引數不再是self,而是cls,表示類本身。

in [20]: class b:

...: a = 1

...: def __init__(self):

...: print('init class a')

...: @classmethod

...: def func1(cls):

...: print('classmehod func1')

...: print(cls.a)

...:

in [21]: b.func1()

classmehod func1

1

下面這個例子可以體現它的用途:

class

data_test2

(object):

day=0

month=0

year=0

def__init__

(self,year=0,month=0,day=0):

self.day=day

self.month=month

self.year=year

@classmethod

defget_date

(cls,

string_date):

#這裡第乙個引數是cls, 表示呼叫當前的類名

year,month,day=map(int,string_date.split('-'))

date1=cls(year,month,day)

#返回的是乙個初始化後的類

return date1

defout_date

(self):

print("year :")

print(self.year)

print("month :")

print(self.month)

print("day :")

print(self.day)

呼叫:r=data_test2.get_date("2016-8-6")

r.out_date()

輸出:year :

2016

month :

8day :

1

這樣子等於先呼叫get_date()對字串進行處理,然後才使用data_test的建構函式初始化。

這種用法爬蟲框架scrapy有經常用,scrapy提供乙個settings.py檔案,開發者可以根據自己的實際情況設定一些值。需要獲取這些值的類都有乙個被classmethod方法修飾的from_settings()函式。這樣做的好處是,可以動態例項化乙個類,增加**的靈活性。

下面是偽碼,僅供參考

#settings.py檔案

download_delay = 1

# 間隔時間

#某個檔案

import settings

class

a(object):

def__init__

(self,delay):

self.delay = delay

@classmethod

deffrom_settings

(cls,settings):

return cls(settings.download_delay)

類的三種方法

方法 函式 1 例項方法 函式 預設 2 類方法 函式 classmethod 3 靜態方法 函式 staticmethod class person person number 0 類變數 def init self name,gender 構造方法 用來物件初始化 self.name name ...

python列表逆序三種方法

栗子 題目 將乙個陣列逆序輸出。程式分析 用第乙個與最後乙個交換。import random list random.randint 0,100 for in range 21 print list 數應該先排序 defbubblesort arr for i in range 1,len arr ...

python 字典訪問的三種方法

定義字典 dic for key in dic print key,dic key print key str dic key 結果 a hello ahello c you cyou b how bhow 細節 print key,dic key 後面有個逗號,自動生成乙個空格 print key...