私は、各プロパティが自分のデータベースにユニークな呼び出しを行う異なる名前のクラスにプロパティを動的に設定しようとしています。しかし、プロパティオブジェクトにアクセスすると、それぞれ異なる値を持つ異なる列を参照しても、すべて同じ結果が返されます。ここでは、コードは次のとおり異なる関数、同じ結果
class Configs:
def __init__(self, guild_id):
self.guild_id = guild_id
for x in configs:
def fget(self):
return cur.execute(f'SELECT {x.name} FROM configs WHERE guild_id = ?', (self.guild_id,)).fetchone()[0], x.name
def fset(self, value):
cur.execute(f'UPDATE configs SET {x.name} = ? WHERE guild_id = ?', (value, self.guild_id))
con.commit()
setattr(Configs, x.name, property(fget, fset))
コンフィグ変数は、各オブジェクトが文字列を指すname
属性を有するオブジェクトのリストです。結果は常にconfigs配列の最後の要素が生成する結果であり、x.name
が呼び出しに使用され、forループが完了するとxは配列の最後の要素として残りますので、これが起こっていると思われます。
'X'とは何ですか?それは 'Configs'ですか? 'x.name'の値はどこで設定しますか? – khelwood
'x'は、文字列があらかじめ割り当てられている単一の' name'属性を持つ単純なオブジェクトです。私はコードの別の部分でこれらのオブジェクトを構築しています。 'configs'は、これらのオブジェクトが3つ以上あるリストです。 – Exa
これは、アクセスされたときにデータベースから読み書きする 'x.name'の値が何であるかという名前のプロパティを設定しようとしていますか?アクティブなレコードのように? – khelwood