class Point3D:
    "Класс, определяющий координаты точки в пространстве"
    x = 1
    y = 1
    z = 1

# Создадим три экземпляра класса
pt_1 = Point3D()
pt_2 = Point3D()
pt_3 = Point3D()

# Выведем переменные экземпляров класса, убедимся что они такие же как в родительском (наследование)
print(pt_1.x, pt_1.y, pt_1.z)
print(pt_2.x, pt_2.y, pt_2.z)
print(pt_3.x, pt_3.y, pt_3.z)

# установим в родительском классе атрибут х = 3
setattr(Point3D, 'x', 3)

# убедимся, что атрибут х изменился и для экземпляров классов, например для экземпляра pt_2
print(pt_2.x, pt_2.y, pt_2.z)


# удалим атрибут z в родительском классе
delattr(Point3D, 'z')

# установим атрибут y в родительском классе равным 100
setattr(pt_3, 'y', 100)

# убедимся, что атрибут y изменился для всех экземпляров класса, например, для этих двух
print(pt_1.y)
print(pt_3.y)

# посмотрим набор атрибутов экземпляра класса. Набор пустой, так как мы не задавали локальные атрибуты, экземпаляр
# использует атрибуты родительского класса
print(pt_1.__dict__)

# убедимся, что удаленный  в родительском классе атрибут z отсутствует и в экземплярах класса
print(getattr(pt_3, 'z', False))



