2017-01-06 9 views
-1

私は1つのクラスで自己変数を使用したいと私はこれを行うには独自の自己変数を持っている別のクラスでそれらを使用します。いくつかのコードはここに役立ちます。python既に自己関数を持っている別のクラスの自己変数を取得

class A(): 
    self.health = 5 
class B(): # This class already has a self function 
    for sprite in all_sprites: 
     if pygame.sprite.collide_circle(self, sprite): 
      self.collide = True 
      self.health -= 0.1 
+2

「自己機能」とは何ですか? – wim

+0

'B'のインスタンスが' A'のインスタンスの 'health'属性を変更できるようにしたいのですか? – snakecharmerb

+0

'self'はインスタンスを参照するための変数です。あなたのクラスは何を表していますか? –

答えて

0

あなたは誤解しています。 selfは内部参照のみです。クラス内では、selfを参照してください。そうでなければ、あなたは直接のようなspriteオブジェクトを参照する、

class A(): 
    self.health = 5 
class B(): # This class already has a self function 
    for sprite in all_sprites: 
     if pygame.sprite.collide_circle(self, sprite): 
      sprite.collide = True 
      sprite.health -= 0.1 
+0

これはうまくいきません。これは 'NameError'を生成します。 –

+0

衝突方法が定義されていないためですか?私はちょうど彼の元のコードをそのままコピー/貼り付けようとしていました。あるいは、何か他の原因があるかもしれません。 –

+0

いいえ、 'self'はあなた/彼のコード内のものを参照していないからです。最初の引数として 'self'で定義されたメソッドにはありません。たとえば、ここで定義されているクラスAで入力してみてください。 –

0

次のコードは、クラスでselfの使用方法を説明するのに役立つことがあります。 4539行目のselfは、スプライトクラスのcollideメソッドに渡されます。クラスの内部では、あなたが作業している現在のインスタンスを表すselfを、必要に応じて他のインスタンスメソッドまたは関数に渡すことができます。

import math 
import random 


def main(): 
    b = B(5, 5, 2) 
    print('Health =', b.health) 
    b.collide_sprites() 
    print('Health =', b.health) 


class Sprite: 

    def __init__(self, x, y, radius): 
     self.x = x 
     self.y = y 
     self.radius = radius 

    def collide(self, other): 
     middle_distance = math.hypot(self.x - other.x, self.y - other.y) 
     edge_margin = self.radius + other.radius 
     return middle_distance < edge_margin 


class A(Sprite): 

    def __init__(self, x, y, radius): 
     super().__init__(x, y, radius) 
     self.health = 5 


class B(A): 

    def __init__(self, x, y, radius): 
     super().__init__(x, y, radius) 
     self.all_sprites = [A(
      random.randrange(10), 
      random.randrange(10), 
      random.randint(1, 4) 
     ) for _ in range(50)] 
     self.collide = False 

    def collide_sprites(self): 
     for sprite in self.all_sprites: 
      if sprite.collide(self): 
       self.collide = True 
       self.health -= 0.1 


if __name__ == '__main__': 
    main() 
関連する問題