Python классы наследование

У меня 2 класса

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y        
    def dist(self, point):
        distance = ((self.x - point.x)**2 + (self.y - point.y)**2)**0.5
        return distance    
    def x(self):
        return self.x
    def y(self):
        return self.y
class Circle(Point):
    def __init__(self, r, Point):
        self.r=r
        self.point=Point
    def center(self):
        return self.point

Не понимаю каким образом реализовать такую конструкцию, чтобы образаясь к свойству X свойства radius объекта circle я получал значение x, а при обращении к Y соответственно y. Чтобы при создании объекта c1 c1=Circle(4, Point(1.5,1)), была возможность получить значение x c1.center.x==1.5


Ответы (1 шт):

Автор решения: Xander

У вас center - это метод. Чтобы получить из него значение, недостаточно обратиться к нему по имени, его ещё нужно вызвать. Для этого нужно после его имени добавить скобки:

c1.center().x

Впрочем, есть альтернативный вариант. Можно использовать у метода декаратор property, и тогда он начнёт вести себя как обычный аттрибут, и можно будет вызывать его так, как у вас в примере

class Circle(Point):
    
    def __init__(self, r, Point):
        self.r=r
        self.point=Point
    
    @property                 # Добавляем вот такое
    def center(self):
        return self.point


c1 = Circle(4, Point(1.5,1))

print(c1.center.x)            # И этот вариант начинает работать
→ Ссылка