Я довольно новичок в OOP и Python. Почти все, что я знаю, является самоучкой, поэтому я был бы признателен, если бы вы могли предоставить только ссылки для меня, чтобы читать, так как я не знаю точной терминологии, которую я должен искать, чтобы прояснить мои сомнения.Классы, скрытые атрибуты и наследование
Это мой код до сих пор:
class Point(object):
x = 2
y = 3
def __init__(self, x, y):
self.x_a = x
self.y_b = y
class RectPoint(Point):
def __init__(self, x, y):
self.x_1 = x
self.y_1 = y
self.dist = (x*x + y*y)**0.5
class CircPoint(Point):
pass
a = Point(3,4)
b = CircPoint(3,4)
c = RectPoint(3,4)
print a.x # 2
print a.y # 3
print a.x_a # 3
print a.y_b # 4
print b.x # 2
print b.y # 3
print b.x_a # 3
print b.y_b # 4
print c.x # 2
print c.y # 3
print c.x_1 # 3
print c.y_1 # 4
print c.dist # 5.0
print c.x_a # AttributeError
print c.y_b # AttributeError
Почему атрибуты self.x_a
и self.y_b
не доступны для класса RectPoint
но доступны для CircPoint
? Как я могу сделать их доступными?
Кроме того, почему self.x
и self.y
доступны для двух классов RectPoint
и CircPoint
?
Ссылка для дальнейшего чтения также будет оценена (вместо объяснения)
Я дам более опытным пользователям объяснить тщательно; но в нескольких словах: «a» имеет все, что должно быть, очевидно; 'b' - это« CircPoint », который наследует все от« Point »и ничего не добавляет, поэтому он имеет все, что имеет« Point ». С другой стороны, 'c' является' RectPoint', классом, который наследует 'x' и' y' от 'Point', но где вы определяете другой метод' __init__', поэтому это переопределяет метод исходного класса. – Roberto