距離プロパティを持つこの RoomPlaceholder クラスがあります。distance プロパティを設定すると、ランダムな角度と距離に基づいて、クラスの x と y がどうあるべきかが自動的に計算されます。
class RoomPlaceholder:
def __init__(self, width, height):
self.width = width
self.height = height
self.id = ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(8))
self.angle = Util.getRandomAngle() # = random.random() * math.pi * 2
self.distance = 0
@property
def distance(self):
print "gamma"
return self._distance
@distance.setter
def distance(self, value):
print "delta"
self._distance = value
coords = Util.getXYByDist(value, self.angle) # translates angle and distance into integer (x, y)
print coords
self._x = coords[0]
self._y = coords[1]
@property
def x(self):
return self._x
@property
def y(self):
return self._y
def __repr__(self):
return "%s: [%sx%s] @ (%s, %s) Distance: %s. Angle: %s." % (self.id, self.width, self.height, self.x, self.y, self.distance, self.angle)
if __name__ == "__main__":
room = RoomPlaceholder(5,5)
print "%s\n" % room.distance
room.distance = 10
print "%s\n" % room.distance
print room
pass
しかし、それは機能していません。コンソールからの出力に基づくと、距離をプロパティではなく属性として扱っているようです。ゲッター (「ガンマ」) メソッドとセッター (「デルタ」) メソッドの両方に print ステートメントがあることに注意してください。
Traceback (most recent call last):0
File "D:\Dropbox\Programming\Python\DungeonGenerator\NewDungeonGenerator.py", line 142, in <module>
10
print room
File "D:\Dropbox\Programming\Python\DungeonGenerator\NewDungeonGenerator.py", line 132, in __repr__
return "%s: [%sx%s] @ (%s, %s) Distance: %s. Angle: %s." % (self.id, self.width, self.height, self.x, self.y, self.distance, self.angle)
File "D:\Dropbox\Programming\Python\DungeonGenerator\NewDungeonGenerator.py", line 97, in x
return self._x
AttributeError: RoomPlaceholder instance has no attribute '_x'
[Finished in 0.0s]
私は Python 2.7 を使用していますが、これは Windows 7 で Sublime Text 3 を介して実行されています。