metaclass

    6熱度

    2回答

    你好堆棧溢出貢獻者, 我是一個新手程序員學習Python現在,我來到this site這有助於解釋面向對象的範例。我知道元類是類的類(比如元目錄是目錄的目錄等等),但是我遇到了一些問題:元類和參數化類之間的實際區別是什麼,根據網站的定義? 如果可以,請在Python中包含代碼示例,以說明兩者之間的差異。感謝您的幫助!

    9熱度

    3回答

    我試圖以書面形式跟蹤子類 因爲我希望這是通用的,我不想這個元類中的任何硬編碼類名稱的通用元類,因此我想出了生成適當的元類的功能,像: def make_subtracker(root): class SubclassTracker(type): def __init__(cls, name, bases, dct): print('registering %s'

    0熱度

    2回答

    我的問題是python/django混合。我有一個表單模型,將顯示一些字段。基於這個模型的一些參數,發送到創建這個對象的元類的數據應該不同。但是如何在Meta的內部實現這個參數呢?我應該使用一些全局變量而不是對象參數(因爲它僅用於臨時存儲值)? class MyForm(forms.ModelForm): def __init__(self, *args, **kwargs):

    4熱度

    1回答

    我有一個class X派生自具有它自己的元類Meta的類。我也想從SQL Alchemy的聲明基礎中派生X.但我不能做簡單的 def class MyBase(metaclass = Meta): #... def class X(declarative_base(), MyBase): #... ,因爲我會得到元類衝突錯誤:「派生類的元類必須是其所有基地的元類的(非嚴

    0熱度

    3回答

    (全部在ActivePython 3.1.2) 我試圖改變類(而不是實例)的屬性。元類的__dict__看起來像是一個完美的解決方案。但當我試圖修改時,我得到: TypeError: 'dict_proxy' object does not support item assignment 爲什麼,我該怎麼辦呢? 編輯 我加入的類定義中的屬性。 setattr不起作用,因爲該類尚未構建,因此我現在還

    0熱度

    3回答

    如何使用getattr調用方法? 我想創建一個元類,它可以調用其他一些以「oposite_」開頭的類的非現有方法。該方法應該有相同數量的參數,但要返回相反的結果。 def oposite(func): return lambda s, *args, **kw: not oposite(s, *args, **kw) class Negate(type): def __ge

    2熱度

    2回答

    我需要能夠從管理面板創建表單。過程將如下所示: 我點擊「添加表單」,然後輸入表單應發送到的電子郵件,當然還有幾個字段(可能由於內聯)由字段名稱,類型以及是否需要組成。用戶應該能夠查看和填寫表格並提交,並將數據發送給管理員給出的電子郵件。 一切看起來很簡單,但從我的角度來看,它需要一些元類編程技巧。 任何人都可以指向Django的goot表單構建器,或者至少提供一些關於創建這樣的東西的提示嗎?我發現

    9熱度

    2回答

    我有一個涉及Python元類的深奧問題。我正在爲Web服務器端代碼創建一個Python包,這將使通過客戶端代理訪問任意Python類變得很容易。我的代理生成代碼需要一個包含在我的API中的所有Python類的目錄。要創建此目錄,我正在使用__metaclass__特殊屬性將掛鉤放入類創建過程。具體而言,「已發佈」API中的所有類將繼承特定基類PythonDirectPublic,該基類本身具有__

    56熱度

    2回答

    爲什麼是這樣的: class MyType(type): def __init__(cls, name, bases, attrs): print 'created', cls class MyMixin: __metaclass__ = MyType class MyList(list, MyMixin): pass 好,並且按預期工作: created

    12熱度

    6回答

    我希望能夠創建一個自動「註冊」全局存儲庫(具有一些屬性)的類方法的python裝飾器。 示例代碼: class my_class(object): @register(prop1,prop2) def my_method(arg1,arg2): # method code here... @register(prop3,prop4) def