私はpygameライブラリを使用しています。メソッドpygame.Surface()にはメソッドがたくさんあります。オブジェクトのインスタンス内に任意の属性を設定できません
my_surface = pygame.Surface((5,5)) #the object requires a size to instantiate
my_surface.coords = (10,10)
しかし、それは私に、このエラーがスローされます:これは私がやろうとしているものです私は
setattr(my_surface, 'coords', (10,10))
代わりの
my_surface.coords = (10,10)
を使用する場合
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'pygame.Surface' object has no attribute 'coords'
同じことが起こります
私は自分のクラスを作成する場合でも
class MyClass():
pass
instance = MyClass()
instance.coords = (10,10)
これは魅力的です。
私は、オブジェクトの各インスタンスに対して__dict__を持たないことと関係がありますが(デフォルトのpythonオブジェクト()について)、オブジェクトがあまりにも多くのメモリを使用する可能性があります。 I retur
instance.__dict__ #this is a MyClass() object
ながら
my_surface.__dict__ #this is a pygame.Surface() object
を行うことが
AttributeError: 'pygame.Surface' object has no attribute '__dict__'
をスローしますns
{}
この特定のインスタンスを修正して任意の属性を受け入れる方法はありますか?現在のところ、私が考えることができる唯一の回避策は、pygame.Surface()の子クラスを作成し、それに__dict__を与えることですが、明らかに、私が毎回任意の属性を追加する必要があるかどうかを、 Surface()のインスタンスを作成し、__dict__を使用してすべてのSurfaceをインスタンス化することで、最初に__dict__を持たない目的のすべてを無効にします。
徹底的に私の問題を説明するために研究している間、私は愚かなクソださて、私はあなたのソリューションつまずいたが、その後私は、オブジェクトが新しい属性を受け入れなかった理由は、 '__dict__'の欠如であることを発見したので、私はに行ってきましたコンソールと 'pygameを試してみました。Surface().__ dict__ 'を返し、何かを返したので、それはdictを持っていたので新しい属性を受け入れるべきだと思った。 30分後になっても、インスタンスには「__dict__」がないため、それができなかったことがわかりました。その時点で、私はまだ私の答えがあったので、私はまだ投稿しています。それにもかかわらず、ありがとうございました。 – Kwantuum
@Kyll大変申し訳ありませんが、コメントの編集ボタンを見つけることができません。あなたの隣に小さいペンが表示されていますが、編集されているとわかりますので、私はそれを見ることはできません。私が見なければならない場所のスクリーンショットを共有してもよろしいですか? 編集:明らかに私はこの1つを編集できます。返信した後にコメントを編集できないのでしょうか? – Kwantuum