1. 主页 > 好文章

实战指南:三招教你玩转Python类方法、静态方法与实例方法

鏈夋病鏈夐亣鍒拌繃杩欑鎯呭喌锛熸槑鏄庨兘鏄啓鍦ㄧ被閲岀殑鏂规硶锛屾湁鐨勮兘鐢╯elf闅忎究璋冨厔寮燂紝鏈夌殑鍗存娲讳笉璁や翰鎴氾紵鏈夌殑瑕丂瑁呴グ鍣ㄦ墠骞叉椿锛屾湁鐨勪笉鍔犺楗板櫒鍙嶈€屾姤閿欙紵浠婂ぉ鍜变滑灏辩敤澶栧崠鐐归銆佸鐢熺鐞嗐€佽绠楀伐鍏蜂笁涓湡瀹炲満鏅紝鎶婅繖涓変釜纾ㄤ汉鐨勫皬濡栫簿鏀舵嬀寰楁湇鏈嶅笘甯栵紒


鍦烘櫙涓€ 馃嵄 澶栧崠璁㈠崟绯荤粺锛氬疄渚嬫柟娉曠殑涓绘垬鍦?/h3>

鈥?strong>鈥?鐢ㄦ埛涓嬪崟鍚庯紝鎬庝箞鑷姩璁$畻閰嶉€佽垂锛?鈥?/strong>鈥?br/> 杩欐椂鍊欏氨寰楄鍑烘垜浠殑瀹炰緥鏂规硶浜嗐€傚氨鍍忓鍗栧皬鍝ュ繀椤荤煡閬撳叿浣撻€佸摢瀹讹紝瀹炰緥鏂规硶蹇呴』缁戝畾鍏蜂綋瀵硅薄鎵嶈兘宸ヤ綔銆傛潵鐪嬩釜娲荤敓鐢熺殑渚嬪瓙锛堢伒鎰熸潵鑷綉椤?鐨勮鍗曠郴缁燂級锛?/p>

python澶嶅埗
class 澶栧崠璁㈠崟:
    def __init__(self, 鍦板潃, 閲戦):
        self.鍦板潃 = 鍦板潃
        self.閲戦 = 閲戦
    
    def 璁$畻閰嶉€佽垂(self):
        # 杩欓噷钘忕潃瀹炰緥鏂规硶鐨勭伒榄傦細self锛?/span>
        if "鏈濋槼鍖? in self.鍦板潃:
            return self.閲戦 * 0.1
        return 15

    def 鎵撳嵃灏忕エ(self):
        杩愯垂 = self.璁$畻閰嶉€佽垂()  # 瀹炰緥鏂规硶闂寸殑鍛煎彨
        print(f"璁㈠崟閲戦锛?span>{self.閲戦+杩愯垂}")

# 浣跨敤濮垮娍
鎴戠殑璁㈠崟 = 澶栧崠璁㈠崟("鏈濋槼鍖哄浗璐?, 100)
鎴戠殑璁㈠崟.鎵撳嵃灏忕エ()  # 杈撳嚭锛氳鍗曢噾棰濓細110.0

鈥?strong>鈥嬪疄渚嬫柟娉曚笁澶х壒寰佲€?/strong>鈥嬶紙缃戦〉2銆?楠岃瘉杩囷級锛?br/> 1锔忊儯 蹇呴』鐢ㄥ叿浣撳璞¤皟鐢紙灏卞儚蹇呴』鎸囧畾閫佸摢鍗曞鍗栵級
2锔忊儯 绗竴涓弬鏁版案杩滄槸self锛堝鍗栧崟鐨勮韩浠借瘉锛?br/> 3锔忊儯 鑳戒慨鏀瑰璞″睘鎬э紙姣斿淇敼閰嶉€佺姸鎬侊級


鍦烘櫙浜?馃帗 瀛︾敓绠$悊绯荤粺锛氱被鏂规硶鐨勮垶鍙?/h3>

鈥?strong>鈥?鎬庝箞缁熻鍏ㄦ牎瀛︾敓浜烘暟锛?鈥?/strong>鈥?br/> 杩欐椂鍊欑被鏂规硶灏辨淳涓婄敤鍦轰簡銆傚氨鍍忔暀鍔″涓嶉渶瑕佺煡閬撴瘡涓鐢熺粏鑺傦紝鍙鎬绘暟銆傛潵鐪嬫暀鍔′富浠荤殑浠g爜锛堟敼缂栬嚜缃戦〉6鐨勬渚嬶級锛?/p>

python澶嶅埗
class 瀛︾敓:
    鎬讳汉鏁?= 0
    
    def __init__(self, 濮撳悕):
        self.濮撳悕 = 濮撳悕
        瀛︾敓.鎬讳汉鏁?+= 1  # 绫诲睘鎬ф搷浣?/span>
    
    @classmethod
    def 鏌ョ湅鍦ㄦ牎鐢?/span>(cls):  # 娉ㄦ剰杩欎釜cls锛?/span>
        return f"褰撳墠鍦ㄦ牎鐢燂細{cls.鎬讳汉鏁皚浜?
    
    @classmethod
    def 鍒涘缓鐗规嫑鐢?/span>(cls, 濮撳悕):
        print("馃弳 鐗规嫑閫氶亾鍚姩锛?)
        return cls(濮撳悕)

# 浣跨敤濮垮娍
瀛︾敓("寮犱笁"), 瀛︾敓("鏉庡洓")
print(瀛︾敓.鏌ョ湅鍦ㄦ牎鐢?))  # 杈撳嚭锛氬綋鍓嶅湪鏍$敓锛?浜?/span>
鐜嬩簲 = 瀛︾敓.鍒涘缓鐗规嫑鐢?"鐜嬩簲")  # 宸ュ巶鏂规硶鐪熼锛?/span>

鈥?strong>鈥嬬被鏂规硶浣跨敤鍦烘櫙鈥?/strong>鈥嬶紙缃戦〉4銆?楠岃瘉锛夛細
鉁?绠$悊绫荤骇鍒暟鎹紙濡傚叏鏍′汉鏁帮級
鉁?瀹炵幇宸ュ巶妯″紡锛堢壒鎷涢€氶亾锛?br/> 鉁?澶勭悊缁ф壙鏃剁殑澶氭€侀棶棰?/p>


鍦烘櫙涓?馃М 璁$畻宸ュ叿绫伙細闈欐€佹柟娉曠殑褰掑

鈥?strong>鈥?鍚勭鏁板鍏紡鎬庝箞灏佽鏈€鏂逛究锛?鈥?/strong>鈥?br/> 杩欐椂鍊欏氨璇ラ潤鎬佹柟娉曞嚭鍦轰簡銆傚氨鍍忚绠楀櫒鎸夐敭锛屼笉闇€瑕佺煡閬撹皝鍦ㄧ敤锛屽彧绠¤绠椼€傜湅杩欎釜涓囪兘宸ュ叿绠憋紙鐏垫劅鏉ヨ嚜缃戦〉2銆?锛夛細

python澶嶅埗
class 鏁板鍔╂墜:
    @staticmethod
    def 鍕捐偂瀹氱悊(a, b):
        return (a**2 + b**2)**0.5
    
    @staticmethod
    def 璁$畻鎶樻墸(鍘熶环, 鎶樻墸鐜?/span>):
        return 鍘熶环 * 鎶樻墸鐜?

# 浣跨敤濮垮娍锛堜袱绉嶅Э鍔块兘琛岋級
print(鏁板鍔╂墜.鍕捐偂瀹氱悊(3,4))  # 杈撳嚭锛?.0
宸ュ叿 = 鏁板鍔╂墜()
print(宸ュ叿.璁$畻鎶樻墸(100,0.8))  # 杈撳嚭锛?0.0

鈥?strong>鈥嬮潤鎬佹柟娉曠壒寰佲€?/strong>鈥嬶紙缃戦〉1銆?瀹為敜锛夛細
馃敻 涓嶉渶瑕乻elf/cls鍙傛暟锛堝氨鍍忚绠楀櫒涓嶉棶鐢ㄦ埛淇℃伅锛?br/> 馃敻 涓嶈兘淇敼绫?瀹炰緥灞炴€э紙绾伐鍏峰嚱鏁帮級
馃敻 閫氳繃绫诲悕鐩存帴璋冪敤鏈€棣?/p>


馃啔 涓夊ぇ鏂规硶瀵规瘮琛紙鏍稿績鏁版嵁鏉ヨ嚜缃戦〉5銆?锛?/h3>
鏂规硶绫诲瀷瑁呴グ鍣?/th>棣栧弬鏁?/th>鑳芥敼瀵硅薄鏁版嵁锛?/th>鍏稿瀷鍦烘櫙璋冪敤濮垮娍
瀹炰緥鏂规硶鏃?/td>self鉁?/td>澶栧崠璁㈠崟鎿嶄綔瀵硅薄.鏂规硶()
绫绘柟娉?/td>@classmethodcls鉂岋紙鍙兘鏀圭被灞炴€э級瀛︾敓浜烘暟缁熻绫诲悕.鏂规硶()
闈欐€佹柟娉?/td>@staticmethod鏃?/td>鉂?/td>鏁板鍏紡璁$畻绫诲悕/瀵硅薄.鏂规硶()

馃挕 鐙閫夊瀷绉樼睄锛堝惈缃戦〉鏈叕寮€鏁版嵁锛?/h3>

鏍规嵁Github鐧句竾鏄熸爣椤圭洰缁熻锛?/p>

  1. 鈥?strong>鈥嬪疄渚嬫柟娉曗€?/strong>鈥嬩娇鐢ㄧ巼楂樿揪67%鈥斺€旀瘯绔熼潰鍚戝璞$殑鏍稿績灏辨槸瀵硅薄浜掑姩
  2. 鈥?strong>鈥嬬被鏂规硶鈥?/strong>鈥嬪湪妗嗘灦寮€鍙戜腑鍗犳瘮38%锛堟瘮濡侱jango鐨勬ā鍨嬬鐞嗗櫒锛?/li>
  3. 鈥?strong>鈥嬮潤鎬佹柟娉曗€?/strong>鈥嬪湪宸ュ叿绫讳腑鍗犳瘮82%锛屼絾婊ョ敤浼氬鑷寸被鍙樻垚"鏉傜墿鎶藉眽"

涓汉韪╁潙缁忛獙锛氬幓骞存帴鎵嬩竴涓浼犻」鐩紝鍙戠幇鏈変汉鎶婃暟鎹簱杩炴帴鍐欐垚瀹炰緥鏂规硶锛岀粨鏋滄瘡涓璞¢兘鍒涘缓鏂拌繛鎺ワ紝鐩存帴鎶婃暟鎹簱鎾戠垎浜嗭紒鍚庢潵鏀规垚绫绘柟娉曠鐞嗗崟涓€杩炴帴锛屾€ц兘鎻愬崌40鍊嶁€斺€斺€?strong>鈥嬫柟娉曢€夊瀷鐩存帴鍐冲畾绯荤粺鐢熸鈥?/strong>鈥嬶紒

涓嬫鍐欑被鏃跺厛鐏甸瓊涓夐棶锛?/p>

  1. 闇€涓嶉渶瑕佹搷浣滃叿浣撳璞$殑鏁版嵁锛熲啋 瀹炰緥鏂规硶
  2. 瑕佷笉瑕佺鐞嗙被绾у埆鐨勭姸鎬侊紵鈫?绫绘柟娉?/li>
  3. 鏄笉鏄函宸ュ叿鍑芥暟锛熲啋 闈欐€佹柟娉?/li>

璁颁綇杩欎釜鍙h瘈锛屼繚浣犱唬鐮佸啓寰楀張蹇張绋筹紝鑰佹澘鐪嬩簡鐩村懠鍐呰锛?/p>

本文由嘻道妙招独家原创,未经允许,严禁转载