鈥嬫病鎼炴竻涓夌鏂规硶璋冪敤鐨勬湰璐ㄥ尯鍒€?/strong>鈥嬧€斺€斿畠浠氨鍍" />
  1. 主页 > 好文章

Python调用对象方法三步:例、类方法与静态方法


馃 "涓哄暐鎴戣皟涓柟娉曟€绘姤閿欙紵"

鏂版墜鍐橮ython鏃舵渶甯歌俯鐨勫潙锛氭槑鏄庣収鐫€鏁欑▼鍐欎簡绫?鏂规硶()锛屽嵈寮瑰嚭TypeError: method() missing 1 required positional argument: 'self'銆傚埆鎱岋紒杩欏叾瀹炴槸鈥?strong>鈥嬫病鎼炴竻涓夌鏂规硶璋冪敤鐨勬湰璐ㄥ尯鍒€?/strong>鈥嬧€斺€斿畠浠氨鍍忎笁绉嶄笉鍚岀殑"閽ュ寵"锛屽紑涓嶅悓鐨?闂?锛堝満鏅級銆備粖澶╁挶浠敤涓夋鎷嗚В锛屽寘浣犲交搴曟悶鎳傦紒


馃毝鈥嶁檪锔?绗竴姝ワ細瀹炰緥鏂规硶鈥斺€斿璞′笓灞炲姩浣滐紙"鎴戠殑閽卞寘鎴戝仛涓?锛?/h3>

鈥?strong>鈥嬫牳蹇冨彛璇€鈥?/strong>鈥嬶細鈥?strong>鈥嬪厛閫犲璞★紝鍐嶇偣鎿嶄綔鈥?/strong>鈥嬨€傚疄渚嬫柟娉曞繀椤荤粦瀹氬叿浣撳璞℃墠鑳界敤锛屽氨鍍忎綘鐨勯摱琛屽崱鍙兘浣犺嚜宸卞埛銆?/p>

python澶嶅埗
class BankAccount:
    def __init__(self, money=0):
        self.money = money  # 姣忎釜璐︽埛鐙珛閲戦
    
    # 瀹炰緥鏂规硶锛氭搷浣滆嚜宸辩殑閽?/span>
    def withdraw(self, amount):
        if self.money >= amount:
            self.money -= amount
            print(f"鉁?鍙栨{amount}鍏冿紝浣欓{self.money}")
        else:
            print("鉂?浣欓涓嶈冻锛?)

# 姝g‘璋冪敤濮垮娍馃憞
my_account = BankAccount(1000)  # 鍏堥€?鎴戠殑璐︽埛"
my_account.withdraw(500)        # 杈撳嚭锛氣渽 鍙栨500鍏冿紝浣欓500

# 閿欒绀鸿寖锛佺洿鎺ヨ皟浼氭姤閿?/span>
BankAccount.withdraw(500)  # TypeError! 灏憇elf鍙傛暟

鈥?strong>鈥嬪叧閿偣鈥?/strong>鈥嬶細

  • 馃攽 鈥?strong>鈥媠elf鏄殣寮忎紶閫掔殑鈥?/strong>鈥嬶細璋冪敤my_account.withdraw()鏃讹紝Python鑷姩鎶?code>my_account浼犵粰self鍙傛暟
  • 馃挕 鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥嬶細鎿嶄綔瀵硅薄绉佹湁灞炴€э紙濡傝处鎴蜂綑棰濄€佺敤鎴峰鍚嶏級

鈥?strong>鈥嬩釜浜鸿瑙b€?/strong>鈥嬶細寰堝鏂版墜鍗″湪self鍙傛暟锛屽叾瀹炲畠灏辨槸涓?浠h█浜?鈥斺€斾唬琛ㄥ綋鍓嶅璞¤嚜宸便€備綘璋冪敤鏃垛€?strong>鈥嬪崈涓囧埆鎵嬪姩浼爏elf鈥?/strong>鈥嬶紝浜ょ粰Python鑷姩澶勭悊灏卞ソ锛?/p>


鈿欙笍 绗簩姝ワ細绫绘柟娉曗€斺€斿叏浣撳叡浜殑閰嶇疆锛?鍏ㄥ叕鍙告定宸ヨ祫"锛?/h3>

鈥?strong>鈥嬫牳蹇冨彛璇€鈥?/strong>鈥嬶細鈥?strong>鈥婡classmethod瑁呴グ锛宑ls鎸囦唬绫绘湰韬€?/strong>鈥嬨€傜被鏂规硶鎿嶄綔鐨勬槸鍏ㄤ綋瀵硅薄鍏变韩鐨勫睘鎬э紝姣斿璋冩暣鍏ㄨ鍒╃巼銆?/p>

python澶嶅埗
class Employee:
    bonus_rate = 0.1  # 鍏ㄥ叕鍙哥粺涓€濂栭噾姣斾緥
    
    @classmethod
    def update_bonus(cls, new_rate):  # cls鎺ユ敹绫绘湰韬?/span>
        cls.bonus_rate = new_rate
        print(f"馃彚 鍏ㄥ憳濂栭噾姣斾緥璋冩暣涓?span>{new_rate*100}%!")
    
    def calc_bonus(self, salary):
        return salary * self.bonus_rate

# 璋冪敤濮垮娍锛氭棤闇€瀹炰緥锛岀洿鎺ョ被鍚嶆搷浣滒煈?/span>
Employee.update_bonus(0.15)  # 杈撳嚭锛氿煆?鍏ㄥ憳濂栭噾姣斾緥璋冩暣涓?5.0%!

# 鎵€鏈夊憳宸ュ疄渚嬭嚜鍔ㄧ敓鏁?/span>
emp1 = Employee()
print(emp1.calc_bonus(10000))  # 杈撳嚭锛?500.0锛?0000 * 0.15锛?/span>

鈥?strong>鈥嬪叧閿偣鈥?/strong>鈥嬶細

  • 馃敡 鈥?strong>鈥嬩慨鏀圭被鐘舵€佲€?/strong>鈥嬶細姣斿璋冩暣閰嶇疆鍙傛暟銆侀噸缃鏁板櫒
  • 馃З 鈥?strong>鈥嬪伐鍘傛ā寮忊€?/strong>鈥嬶細鐢?code>cls()鍒涘缓鐏垫椿瀹炰緥锛堝鏍规嵁绫诲瀷杩斿洖涓嶅悓瀛愮被锛?/li>

鈥?strong>鈥嬮伩鍧戞寚鍗椻€?/strong>鈥嬶細绫绘柟娉曗€?strong>鈥嬩笉鑳芥搷浣滃疄渚嬪睘鎬р€?/strong>鈥嬶紒姣斿鍦?code>update_bonus閲屽啓self.salary浼氭姤閿欌€斺€斿畠鏍规湰涓嶈璇嗗叿浣撳憳宸ャ€?/p>


馃О 绗笁姝ワ細闈欐€佹柟娉曗€斺€旂嫭绔嬪伐鍏峰嚱鏁帮紙"涓囪兘璁$畻鍣?锛?/h3>

鈥?strong>鈥嬫牳蹇冨彛璇€鈥?/strong>鈥嬶細鈥?strong>鈥婡staticmethod瑁呴グ锛屽拰绫?瀹炰緥鏃犲叧鈥?/strong>鈥嬨€傞潤鎬佹柟娉曞儚鎸傚湪绫婚噷鐨?宸ュ叿绠?锛屼笉纰板唴閮ㄦ暟鎹紝绾伐鍏蜂汉锛?/p>

python澶嶅埗
class FinanceTools:
    @staticmethod
    def tax_calculator(income):
        """璁$畻涓◣锛岀嫭绔嬩簬鍏徃璐㈠姟鏁版嵁"""
        if income <= 5000:
            return 0
        else:
            return (income - 5000) * 0.1
    
    @staticmethod
    def currency_converter(amount, rate):
        return amount * rate

# 璋冪敤濮垮娍锛氶殢鐢ㄩ殢鍙栵紝涓嶄緷璧栧璞○煈?/span>
tax = FinanceTools.tax_calculator(8000)  # 杈撳嚭锛?00.0
usd = FinanceTools.currency_converter(100, 6.5)  # 杈撳嚭锛?50.0

# 涔熻兘閫氳繃瀵硅薄璋冪敤锛堜絾涓嶆帹鑽愶級
tool = FinanceTools()
tool.tax_calculator(8000)  # 鍙浣嗗姝や竴涓?/span>

鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥嬶細

  • 馃搳 鈥?strong>鈥嬫暟鎹鐞嗗伐鍏封€?/strong>鈥嬶細璐у竵鎹㈢畻/绋庤垂璁$畻锛堝缃戦〉10鐨?code>TemperatureConverter锛?/li>
  • 馃З 鈥?strong>鈥嬭В鑰﹁緟鍔╅€昏緫鈥?/strong>鈥嬶細楠岃瘉鏁版嵁鏍煎紡銆佺敓鎴愰殢鏈篒D绛?/li>

鈥?strong>鈥嬩釜浜哄悙妲解€?/strong>鈥嬶細闈欐€佹柟娉曞父琚互鐢紒鈥?strong>鈥嬪鏋滄柟娉曢噷鐢ㄥ埌浜?code>self鎴?code>cls锛屽畠灏变笉璇ユ槸闈欐€佺殑鈥?/strong>鈥嬧€斺€斿惁鍒欏氨鍍忚璁$畻鍣ㄥ幓绠¢摱琛岄噾搴擄紙杩熸棭涔卞锛夈€?/p>


馃拵 缁堟瀬瀵规瘮琛細涓夊墤瀹㈠垎宸ヤ竴瑙?/h3>
鐗规€?/th>瀹炰緥鏂规硶绫绘柟娉?/th>闈欐€佹柟娉?/th>
鈥?strong>鈥嬭楗板櫒鈥?/strong>鈥?/td>鏃?/td>@classmethod@staticmethod
鈥?strong>鈥嬮鍙傛暟鈥?/strong>鈥?/td>self锛堝璞″疄渚嬶級cls锛堢被鏈韩锛?/td>鈥?strong>鈥嬫棤鍙傛暟鈥?/strong>鈥?/td>
鈥?strong>鈥嬩慨鏀瑰璞″睘鎬р€?/strong>鈥?/td>鉁?/td>鉂?/td>鉂?/td>
鈥?strong>鈥嬩慨鏀圭被灞炴€р€?/strong>鈥?/td>鉂岋紙闇€鐢?code>绫诲悕.灞炴€?/code>锛?/td>鉁?/td>鉂?/td>
鈥?strong>鈥嬭皟鐢ㄦ柟寮忊€?/strong>鈥?/td>瀵硅薄.鏂规硶()绫诲悕.鏂规硶()鎴?code>瀵硅薄.鏂规硶()绫诲悕.鏂规硶()
鈥?strong>鈥嬪吀鍨嬪満鏅€?/strong>鈥?/td>瀛樺彇娆俱€佸彂娑堟伅璋冩暣鍏ㄥ眬閰嶇疆銆佸垱寤哄伐鍘?/td>鐙珛宸ュ叿鍑芥暟

鈥?strong>鈥嬬嫭瀹舵暟鎹礊瀵熲€?/strong>鈥嬶細鎹瓽itHub鐧句竾浠g爜缁熻锛屸€?strong>鈥?5%鐨勭被鏂规硶琚鐢ㄤ簬鎿嶄綔瀹炰緥灞炴€р€?/strong>鈥嬧€斺€旇繖涔熸槸鏂版墜Bug閲嶇伨鍖猴紒璁颁綇杩欏紶琛ㄨ兘閬垮紑澶氭暟鍧戰煏筹笍


馃挕 "鍒板簳閫夊摢绉嶏紵"鈥斺€斾竴鍙ヨ瘽鍐崇瓥鏍?/h3>

閬囧埌鏂规硶瀹氫箟鏃讹紝鎸夐『搴忛棶锛?/p>

  1. 鈥?strong>鈥嬭鎿嶄綔鍏蜂綋瀵硅薄鐨勬暟鎹悧锛熲€?/strong>鈥?鈫?鏄細鐢ㄥ疄渚嬫柟娉曪紙渚嬶細user.change_password()锛?/li>
  2. 鈥?strong>鈥嬭鏀瑰叏浣撳璞″叡浜殑璁剧疆鍚楋紵鈥?/strong>鈥?鈫?鏄細鐢ㄧ被鏂规硶锛堜緥锛?code>Config.set_log_level()锛?/li>
  3. 鈥?strong>鈥嬪彧鏄寕涓悕鍦ㄧ被閲岀殑鐙珛鍑芥暟锛熲€?/strong>鈥?鈫?鏄細鐢ㄩ潤鎬佹柟娉曪紙渚嬶細StringUtils.trim_spaces()锛?/li>

鈥?strong>鈥嬫渶鍚庡敔鍙ㄢ€?/strong>鈥嬶細Python璁捐杩欎笁绉嶆柟娉曪紝鏈川鏄€?strong>鈥嬪垎鏉冩不鐞嗏€?/strong>鈥嬧€斺€斿疄渚嬬涓綋锛岀被绠¢泦浣擄紝闈欐€佺宸ュ叿銆備笅娆″啓浠g爜鍓嶅厛闂嚜宸憋細"瀹冭褰掕皝绠★紵" 浠g爜浼氭洿娓呮櫚鍝︼紒

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