2017-07-27 568 views
0

我新的編程,我很困惑,你怎麼稱呼這是一個類中定義的Python 2.例如(與障礙是以往所作出的類)的方法/參數,如何從類(Python)的__init__方法調用變量?

class Block(Obstacle): 

    def __init__(self, origin, end, detection=9.): 
     self.type = 'block' 
     self.origin = origin 
     self.end = end 

     x1 = self.origin[0] 
     y1 = self.origin[1] 
     x2 = self.end[0] 
     y2 = self.end[1] 

    def __str__(self): 
     return "block obstacle" 

當我生成環境時,我定義了不同的x1,y1,x2和y2值(基本上表示塊的角點座標點)。我有另一種方法,在計算某些東西時我需要x1,y1,x2和y2的值,但是我很困惑我是如何將它們稱爲這個新函數的?我會在這個新功能中加入什麼參數?

+0

如果使用self.name定義它們,它們將成爲類中的「全局」變量。你可以使用self.x,self.y = self.origin –

+1

@AntonvBR:我會稱它們爲* instance *變量。全球的是不同的事... –

+0

@SergeBallesta你是絕對正確的,我找不到更好的名字,因此引用「」標記。 –

回答

1
import math 

我會讓x1 - >self.x1所以你可以把它作爲一個對象變量。

在類對象的內部,您可以定義這些函數作爲計算的例子。

def calculate_centre(self): 
    self.centre_x = self.x2 - self.x1 
    self.centre_y = self.y2 - self.y1 

    self.centre = (centre_x, centre_y) 

def distance_between_block_centres(self, other): 
    block_x, block_y = other.centre 

    distance = math.sqrt((self.centre_x - block_x)**2 + (self.centre_y - block_y)**2) 
    return distance 


block = Block(stuff) 
block_2 = Block(other_stuff) 

,如果你想使用你已創建的對象調用這些功能:

block.calculate_centre() 
block_2.calculate_centre() 
distance_between = block.distance_between_block_centres(block_2) 

即使外部到對象調用變量:

print block.centre 
#>>> (3, 5) 

最後你可以運行的計算的中心,而不必每次創建對象時都要調用它,如果將它放入def __init__()

self.calculate_centre()