1. ホーム
  2. python

Python:実行時にメソッドや属性を変更する

2023-08-09 21:28:41

質問

Pythonで、属性やメソッドを追加・削除できるクラスを作りたいと考えています。どのように私はそれを達成することができますか?

ああ、理由は聞かないでください。

どのように解決するのですか?

<ブロッククオート

Pythonで、属性やメソッドを追加・削除できるクラスを作りたいのですが、どうすればよいでしょうか?

import types

class SpecialClass(object):
    @classmethod
    def removeVariable(cls, name):
        return delattr(cls, name)

    @classmethod
    def addMethod(cls, func):
        return setattr(cls, func.__name__, types.MethodType(func, cls))

def hello(self, n):
    print n

instance = SpecialClass()
SpecialClass.addMethod(hello)

>>> SpecialClass.hello(5)
5

>>> instance.hello(6)
6

>>> SpecialClass.removeVariable("hello")

>>> instance.hello(7)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'SpecialClass' object has no attribute 'hello'

>>> SpecialClass.hello(8)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'SpecialClass' has no attribute 'hello'