# Практика по property

from string import digits
from math import sqrt

class User:

    def __init__(self, login, password) -> None:
        self.login = login
        self.password = password
        self.__secret = 'abracadabra'
        
    @property
    def secret(self):
        s = input("Введите ваш пароль: ")
        if s == self.password:
            return self.__secret
        else:
            raise ValueError("Доступ закрыт")

    @property
    def password(self):
        print('getter called')
        return self.__password

    @staticmethod
    def is_include_number(password):
        for digit in digits:
            if digit in password:
                return True
        return False

    @password.setter
    def password(self, value):
        print('setter called')
        if not isinstance(value, str):
            raise TypeError("Пароль должен быть строкой")
        if len(value) < 4:
            raise ValueError("Длина пароля должна быть не менее 4-ех символов")
        if len(value) > 12:
            raise ValueError("Длина пароля должна быть не более 12-и символов")
        if not User.is_include_number(value):
            raise ValueError("Пароль должен содержать хотя бы одну цифру")
        self.__password = value


# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

class Point:

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

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

    def get_distance_to_origin(self):
        if self.x is None or self.y is None:
            return None
        return sqrt(self.x ** 2 + self.y ** 2)

    def display(self):
        if self.x is None or self.y is None:
            print('Координаты не заданы')
        else:
            print(f'Point({self.x}, {self.y})')


def test_1():
    p3 = Point()
    p3.display()
    print(p3.get_distance_to_origin())
    p3.x = 4
    p3.display()
    print(p3.get_distance_to_origin())
    p3.y = 3
    p3.display()
    print(p3.get_distance_to_origin())


def main():
    # user1 = User('Ivan', '123df')
    test_1()


if __name__ == '__main__':
    main()