Upgrade to Pro — share decks privately, control downloads, hide ads and more …

pythonでメタプログラミング(メタクラス編)

 pythonでメタプログラミング(メタクラス編)

Daiki Ikeshima

March 25, 2021
Tweet

More Decks by Daiki Ikeshima

Other Decks in Programming

Transcript

  1. QZUIPOͰϝλϓϩάϥϛϯά
    dϝλΫϥεd
    UFDIUBML
    "*νʔϜ஑ౢେथ

    View Slide

  2. ϝλϓϩάϥϛϯάͱ͸ʁ
    w ίʔυΛੜ੒͢ΔΑ͏ͳϓϩάϥϛϯάͷ͜ͱ
    w ίʔυΛʮϝλతʯʹ࡞Δ

    View Slide

  3. ͳͥϝλϓϩάϥϛϯά͢Δͷ͔ʁ
    w Ϋϥεੜ੒࣌ͷৼΔ෣͍ͳͲಛघͳ੍ޚ͕Ͱ͖Δ
    w ؆୯ʹ͔͚ΔΑ͏ʹͳΔ
    ͨͩ͠ɺଟ༻͢ΔͱෳࡶʹͳΓ͗͢ΔͷͰɺ
    w දग़͢Δ෦෼Ͱ͸ଟ༻͠ͳ͍
    w ϥΠϒϥϦͱ͔Ͱ͸ྑͦ͞͏

    View Slide

  4. QZUIPOͰϝλϓϩάϥϛϯάྫ
    ͍ΖΜͳύλʔϯ͕͋Δ
    w ϝλΫϥεΫϥεͷ࡞ΓํΛنఆ
    w σίϨʔλϝιουΛϥοϓ͢Δ
    w σΟεΫϦϓλ@@HFU@@
    ͱ͔͕࣮૷͞Ε͍ͯΔΫϥ
    εɻ!DMBTTNFUIPE !TUBUJDNFUIPEͷ࣮૷Ͱ༗໊
    w ͳͲͳͲ
    σίϨʔλ
    σΟεΫϦϓλΛ࢖࣮ͬͯ૷ͨ͠
    TUBUJDNFUIPEͷٖࣅίʔυ

    View Slide

  5. ΫϥεͷΠϯελϯε࡞੒
    w @@OFX@@
    Š@@JOJU@@
    ͱ͍͏ॱͰಛघϝιου͕ݺ͹ΕΔ
    w @@OFX@@ DMT
    Πϯελϯε͕Ͱ͖Δલʹ࣮ߦɻΫϥεΛΠϯελϯεԽ͢Δɻ
    w @@JOJU@@ TFMG
    Πϯελϯε͕Ͱ͖ͨޙʹ࣮ߦɻΠϯελϯεΛॳظԽ͢Δɻ
    w @@OFX@@
    Λ࣮ߦޙΠϯελϯε͕ฦΔͱɺͦͷ@@JOJU@@
    Λ࣮ߦ͢Δ࢓༷
    Ϋϥε4BNQMF$MBTT͔ΒΠϯελϯεTFMGΛ࡞੒
    ΠϯελϯεTFMGΛॳظԽ
    ΠϯελϯεTFMGΛฦ͢

    View Slide

  6. ϝλΫϥεͱ͸ʁ
    w ϝλΫϥεɿΫϥεΛ࡞ΔΫϥεͷ͜ͱ
    w ࢦఆ͢Δ͜ͱͰΫϥε࡞੒࣌ͷৼΔ෣͍Λ੍ޚͰ͖Δ
    w Ϋϥε͸Ͳ͏΍ͬͯ࡞੒͞Ε͍ͯΔͷ͔ʁʁʁ
    4BNQMF$MBTT͕DMTʹͳΔ 4BNQMF.FUB$MBTTͰDMTΛ࡞੒

    View Slide

  7. ΫϥεΛ࡞ΔɿUZQF

    UZQF
    ͸ʮΦϒδΣΫτͷܕΛ஌Γ͍ͨͱ͖ʯʹ
    ࢖͏ϝιουͱͯ͠༗໊
    ΋͏̍ͭͷ࢖͍ํΫϥεΛ࡞Δ
    w Ϋϥε໊ ܧঝ͢ΔΫϥε ଐੑΛύϥϝʔλ
    ʹࢦఆ
    w UZQFΛΠϯελϯεԽ͢ΔͱΫϥεʹͳΔ
    ಉ͡
    ˢ
    ˠ

    View Slide

  8. ϝλΫϥεΛ࣮૷ͯ͠ΈΔ

    w UZQFͷػೳΛ࢖ͬͯϝλΫϥεΛ࣮૷
    w ϝλΫϥε͸ΫϥεΛ࡞ΔΫϥε
    w UZQF͸ΠϯελϯεԽ͢ΔͱΫϥεʹͳΔ
    w ϝλΫϥεͷ@@OFX@@
    ͰUZQFΛ࢖ͬͯΫϥεΛ࡞Δ
    UZQFΛΠϯελϯεԽͯ͠ΫϥεΛ࡞੒
    ࡞੒ͨ͠ΫϥεΛฦ͢
    6TF$MBTTఆٛ࣌ʹ.FUB$MBTT͕Πϯελ
    ϯεԽ͞Ε@@OFX@@
    Λ࣮ߦɻฦͬͯ͘Δ
    ΫϥεΛDMTʹ͢Δɻ
    ΠϯελϯεԽͤͣʹݺ΂Δ

    View Slide

  9. ϝλΫϥεΛ࣮૷ͯ͠ΈΔ

    UZQFΛΠϯελϯεԽ
    ͯ͠ΫϥεΛ࡞੒
    UZQFΛܧঝ
    w UZQFΛܧঝͯ͠.FUB$MBTTͰಉ༷ͷॲཧΛ࣮ݱ͢Δ
    w UZQF ʜ
    ŠTVQFS
    @@OFX@@ ʜ
    ͰΫϥεΛ࡞Δ

    View Slide

  10. ϝλΫϥεͷ࢖༻࣮ྫMVJHJ
    MVJHJ
    w TQPUJGZ։ൃͷύΠϓϥΠϯπʔϧ
    w ґଘؔ܎ͷ͋ΔॲཧΛղܾ͠ͳ͕Β࣮ߦͯ͘͠ΕΔ
    w "*νʔϜͰ͸ϥοϓͨ͠HPLBSUͱ͍͏πʔϧΛඪ४తʹ࢖༻
    IUUQTTQFBLFSEFDLDPNOJTIJCBHPLBSUXP[VPUVUBIVB IUUQTTQFBLFSEFDLDPNWBBBBBORVJTIHPLBSUGBMTFZVOZPOHUPLFUJOJUVJUF

    View Slide

  11. MVJHJHPLBSUλεΫͷಛ௃
    w ͲͷλεΫΛ࣮ߦ͢Δ͔͸จࣈྻͰࢦఆՄೳ
    w UBTL͸ύϥϝʔλͰίʔυҎ֎͔ΒจࣈྻͰͷ੍ޚ͕Մೳ
    w ઃఆϑΝΠϧ͔Β
    w ίϚϯυϥΠϯύϥϝʔλ͔ΒɹɹͳͲ
    5BTL"
    5BTL#
    \λεΫ໊TUSλεΫΫϥεPCKFDU^

    ͷؔ܎Λอ͍࣋ͯ͠ΔͨΊ
    5BTL"ʹґଘ
    JOUͷύϥϝʔλΛ࣋ͭ
    w MVJHJHPLBSUͰ͸λεΫͱ͍͏Ϋϥε୯ҐͰॲཧΛॻ͘

    View Slide

  12. λεΫͷ໊લͱ࣮ମΛͲ͏อ͍࣋ͯ͠Δ͔ʁ
    w λεΫΫϥεͷϝλΫϥεͰ͋Δ3FHJTUFSʹλεΫΫϥεΛอ͍࣋ͯ͠Δ
    w ֤5BTLએݴ࣌ʹ3FHJTUFS@SFHʹλεΫ͕௥Ճ͞Ε͍ͯ͘
    w 3FHJTUFS@SFHΛࢀর͢Δ͜ͱͰޙͰλεΫͷҰཡ͕औΕΔ
    ϝλΫϥε
    BCD"#$.FUB UZQFΛܧঝ
    Λܧঝ
    3FHJTUFS@SFHʹλεΫΫϥεΛ௥Ճ
    DMT λεΫΫϥε
    Λ࡞੒

    View Slide

  13. λεΫ໊ͱλεΫΫϥεΛͲ͏อ͍࣋ͯ͠Δ͔ʁ
    w ͲͷλεΫΛ࣮ߦ͢Δ͔͸จࣈྻͰࢦఆՄೳ
    w ύϥϝʔλͰίʔυҎ֎͔ΒจࣈྻͰͷ੍ޚ͕Մೳ
    3FHJTUFS@SFHʹ͋ΔλεΫ͔Β֘౰͢ΔλεΫΛ୳࣮ͯ͠ߦ͢Δ
    3FHJTUFS@SFHʹ͋ΔλεΫ͔Β֘౰͢ΔλεΫΛ୳ͯ͠ύϥϝʔλΛηοτ͢Δ

    View Slide