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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將類的名稱傳遞給函數(shù),分配給方法之外的類屬性

將類的名稱傳遞給函數(shù),分配給方法之外的類屬性

慕桂英546537 2022-01-11 20:19:38
蟒蛇 3.7:我有一個類定義,其中根據(jù)類名為類屬性分配一個值,并且該值在類內(nèi)的裝飾器中使用。我正在尋找“當(dāng)前正在定義的類”的代詞。這是一個例子:class MyClass:    # NameError: name '__class__' is not defined    class_logger = find_logger(__class__.__name__)    # __init__ is not important    def __init__(self):        # This works!        self.logger = find_logger(__class__.__name__)    @mydecorator(class_logger)    # mymethod is not important    def mymethod(self):        return 1“當(dāng)前正在定義的類”的合適代詞是什么?(這類似于How to get the current Python class name in __init__ without the class of "self"?,但那里的問題是“在init的定義中”,當(dāng)時是針對 2.7.Python 3。 x 解決了這個問題。)
查看完整描述

2 回答

?
叮當(dāng)貓咪

TA貢獻1776條經(jīng)驗 獲得超12個贊

當(dāng)類定義尚未完成評估時,不能保證類對象存在并且用戶可以訪問。即使它是可訪問的,它也可能不會被初始化到您可以用它做任何有用的事情的程度。


也就是說,您也許可以獲得類的名稱。__qualname__是一個屬性,它包含類/函數(shù)/方法/描述符/生成器實例的限定名稱。您應(yīng)該能夠從類的定義中訪問它。


class Fred:

    print("Fred's qualname:", __qualname__)

    class Barney:

        print("Barney's qualname:", __qualname__)

結(jié)果:


Fred's qualname: Fred

Barney's qualname: Fred.Barney

如果您的類未在文件級別定義,則可能需要進行一些字符串操作以將其名稱與路徑的其余部分分開。例如,將上面的示例更改print("Barney's qualname:", __qualname__.rpartition(".")[-1])為僅獲取“Barney”而不是“Fred.Barney”。


盡管我盡了最大的努力,但我找不到明確確認__qualname__在作為常規(guī)名稱而不是作為屬性訪問時具有合理值的文檔。我不完全相信這是定義明確的行為,所以我認為我不能毫無保留地支持生產(chǎn)質(zhì)量代碼。


查看完整回答
反對 回復(fù) 2022-01-11
?
江戶川亂折騰

TA貢獻1851條經(jīng)驗 獲得超5個贊

要在定義期間使用類名,您還可以使用帶有__prepare__方法的元類:


def find_logger(name):

    return name + '_logger'



class PrepareClassLogger(type):

    def __prepare__(name, bases, **kwargs):

        return {'class_logger': find_logger(name)}



class MyClass(metaclass=PrepareClassLogger):

    pass


print(MyClass.class_logger)  # MyClass_logger


查看完整回答
反對 回復(fù) 2022-01-11
  • 2 回答
  • 0 關(guān)注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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