Python: Как я могу вызвать переменные метода члена из другого метода того же класса? - PullRequest
0 голосов
/ 16 июня 2020

Я пытаюсь сослаться на переменные (x1, x2, x3, x4) функции-члена (расстояние) внутри другого метода (наклон) в том же классе. Однако это вызывает ошибку. Что я делаю не так?

class Line():

def __init__ (self,cor1,cor2):
    self.cor1 = cor1
    self.cor2 = cor2

def distance(self):
    x1 = self.cor1[0]
    y1 = self.cor1[1]
    x2 = self.cor2[0]
    y2 = self.cor2[1]
    return math.sqrt((x2-x1) ** 2 + (y2-y1) ** 2)

def slope(self):
    return (self.y1-self.y2)/(self.x1-self.x2)

Я попытался переместить его в метод init , и он работает. У меня работает следующий код. Однако есть ли способ вызвать x1, x2, y1, y2, которые являются переменными одного метода из другого?

class Line():

def __init__ (self,cor1,cor2):
    self.cor1 = cor1
    self.cor2 = cor2
    self.x1 = self.cor1[0]
    self.y1 = self.cor1[1]
    self.x2 = self.cor2[0]
    self.y2 = self.cor2[1]

def distance(self):
    return math.sqrt((self.x2-self.x1) ** 2 + (self.y2-self.y1) ** 2)

def slope(self):
    return (self.y1-self.y2)/(self.x1-self.x2)

1 Ответ

0 голосов
/ 16 июня 2020

Нет, вы не можете этого сделать; кроме того, не рекомендуется использовать глобальные переменные внутри классов.

Ваш OOP проект может использовать class Point для представления пары координат; этот класс также должен содержать метод distance.

В следующем примере я добавил метод length к class LineSegment как property, чтобы вы могли получить к нему доступ как attribute:

class Point:
    """represents a pair of coordinates
    """

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

    def distance(self, other):
        return ((other.x - self.x)**2 + (other.y - self.y)**2)**.5


class LineSegment:
    """represents a line segment with its start and end Point
    """

    def __init__ (self, start, end):
        self.start = start
        self.end = end        

    def slope(self):
        denom = (self.start.x - self.end.x)
        return (self.start.y - self.end.y) / (self.start.x - self.end.x) if denom else float('inf')

    @property
    def length(self):
        return self.start.distance(self.end)


cor1 = Point(1, 2)
cor2 = Point(3, 4)

line = LineSegment(cor1, cor2)
print(line.slope(), line.length)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...