ファクトリ関数を使用します。
def GetTorrentClass(slots_iterable):
class Torrent(object):
__slots__ = slots_iterable
return Torrent
スロットを使用するには、次の点に注意してください。
slots_iterable
文字列の iterable でなければなりません
- あなたのクラスは新しいスタイルでなければなりません
- あなたのクラスは、実装するクラスを継承できません
__dict__
(つまり、それ__slots__
だけではありません)
ここで、「オブジェクトの構造を変更しないようにする必要がある」と言いますが、使用すること__slots__
が問題の唯一の (そしておそらく最善ではない) 解決策ではありません。スロットを使用すると、クラスがコードで使用しにくくなります。
代わりに、次のことができます。
class Torrent(object):
def __init__(self, fields):
self.fields = fields #Fields could be ('field1', 'field2')
def save(self):
for field in self.fields:
self.store_to_db(field, getattr(self, field))
このようにして、実際のフィールドのみがデータベースに保存されることが確実になります。