第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

具有部分功能的動(dòng)態(tài)Python類(lèi)

具有部分功能的動(dòng)態(tài)Python類(lèi)

MYYA 2024-01-15 15:22:12
print(我對(duì) python3 中的錯(cuò)誤感到困惑。我想用一些類(lèi)方法動(dòng)態(tài)創(chuàng)建一個(gè)類(lèi)。我似乎能夠這樣做:import typesdef class_body(ns):    ns.update({"a": lambda self, x: x - 1})    return nsnewc = types.new_class("foo", exec_body=class_body)print(newc().a(3))# prints 2 as expected但我也想動(dòng)態(tài)創(chuàng)建類(lèi)方法。我似乎能夠做類(lèi)似的事情:import typesdef funcs_gen(k=1):    def fn(self, a):        return a + k + self.i    return fndef class_body(ns):    ns.update({"a": funcs_gen(k=2), "i": 5})    return nsnewc = types.new_class("foo", exec_body=class_body)print(newc().a(1))# prints 8 as expected但是如果我嘗試對(duì)部分函數(shù)執(zhí)行相同的操作,似乎會(huì)發(fā)生一些奇怪的事情:import typesfrom functools import partialdef fn(self, a, k=1):    return a + k + self.idef class_body(ns):    ns.update({"a": partial(fn, k=2), "i": 5})    return nsnewc = types.new_class("foo", exec_body=class_body)print(newc().a(1))# Unexpectedly produces: `TypeError: fn() missing 1 required positional argument: 'a'`
查看完整描述

1 回答

?
三國(guó)紛爭(zhēng)

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊

用于partialmethod方法。

import types

from functools import partialmethod


def fn(self, a, k=1):

? ? return a + k + self.i


def class_body(ns):

? ? ns.update({"a": partialmethod(fn, k=2), "i": 5})

? ? return ns


newc = types.new_class("foo", exec_body=class_body)


print(newc().a(1))

輸出:


8


查看完整回答
反對(duì) 回復(fù) 2024-01-15
  • 1 回答
  • 0 關(guān)注
  • 124 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)