import math

class Cat:

    breed = 'pers'

    def hello():
        print("hello")

    def show_breed(instance):
        print(f'my breed is {instance.breed}')
        print(instance)

    def show_name(instance):
        if hasattr(instance, 'name'):
            print(f'my name is {instance.name}')
        else:
            print('nothing')

    def set_value(koshka, value, age=0):
        koshka.name = value
        koshka.age = age

    def new_method(self):
        pass

class Point:

    list_points = []

    def __init__(self, x, y) -> None:
        self.move_to(x, y)
        Point.list_points.append(self)

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

    def go_home(self):
        self.move_to(0, 0)

    def print_point(self):
        print(f"Точка с координатами ({self.x}, {self.y})")

    def calc_distance(self, another_point):
        if not isinstance(another_point, Point):
            raise ValueError("Аргумент должен принадлежать классу Точка")
        return math.sqrt((self.x - another_point.x)**2 + (self.y -another_point.y)**2)

class Numbers:

    def __init__(self, *args) -> None:
        self.values = []
        self.values.extend(args)

    def add_number(self, val):
        self.values.append(val)

    def get_positive(self):
        return [x for x in self.values if x > 0]

    def get_negative(self):
        return [x for x in self.values if x < 0]

    def get_zeroes(self):
        return [x for x in self.values if x == 0]


class Stack:
    def __init__(self):
        self.values = []

    def push(self, value):
        self.values.append(value)

    def pop(self):
        if not self.values:
            print("Empty Stack")
        else:
            return self.values.pop()

    def peek(self):
        if not self.values:
            print("Empty Stack")
            return None
        return self.values[-1]
    
    def is_empty(self):
        return not bool(self.values)

    def size(self):
        return len(self.values)

class Worker:
    def __init__(self, name, salary, gender, passport):
        self.name = name
        self.salary = salary
        self.gender = gender
        self.passport = passport

    def get_info(self):
        print(f"Worker {self.name}; passport-{self.passport}")


class CustomLabel:
    def __init__(self, text, **kw):
        self.text = text
        for name, value in kw.items():
            setattr(self, name, value)

    def config(self, **kw):
        for name, value in kw.items():
            setattr(self, name, value)
        


def main():

    """CustomLabel"""
    label1 = CustomLabel(text="Hello Python", fg="#eee", bg="#333")
    label2 = CustomLabel(text="Username")
    label3 = CustomLabel(text="Password", font=("Comic Sans MS", 24, "bold"), bd=20, bg='#ffaaaa')
    label4 = CustomLabel(text="Hello", bd=20, bg='#ffaaaa')
    label5 = CustomLabel(text="qwwerty", a=20, b='#ffaaaa', r=[3, 4, 5, 6], p=32)

    assert label1.__dict__ == {'text': 'Hello Python', 'fg': '#eee', 'bg': '#333'}
    assert label2.__dict__ == {'text': 'Username'}
    assert label3.__dict__ == {'text': 'Password', 'font': ('Comic Sans MS', 24, 'bold'), 'bd': 20, 'bg': '#ffaaaa'}
    assert label4.__dict__ == {'text': 'Hello', 'bd': 20, 'bg': '#ffaaaa'}
    assert label5.__dict__ == {'text': 'qwwerty', 'a': 20, 'b': '#ffaaaa', 'r': [3, 4, 5, 6], 'p': 32}

    print(label1.__dict__)
    print(label2.__dict__)
    print(label3.__dict__)
    print(label4.__dict__)
    print(label5.__dict__)

    label4.config(color='red', bd=100)
    label5.config(color='red', bd=100, a=32, b=432, p=100, z=432)

    assert label4.__dict__ == {'text': 'Hello', 'bd': 100, 'bg': '#ffaaaa', 'color': 'red'}
    assert label5.__dict__ == {'text': 'qwwerty', 'a': 32, 'b': 432, 'r': [3, 4, 5, 6], 'p': 100,
                                'color': 'red', 'bd': 100, 'z': 432}

    """Class Numbers"""
    '''
    num = Numbers(1, 2, -3, -4, 5)
    num.get_values()
    print(num.get_positive())
    '''

    """Class Stack"""
    # stack = Stack()
    # stack.peek()
    # print(stack.is_empty())
    
    """Worker"""
    """
    persons= [
    ('Allison Hill', 334053, 'M', '1635644202'),
    ('Megan Mcclain', 191161, 'F', '2101101595'),
    ('Brandon Hall', 731262, 'M', '6054749119'), 
    ('Michelle Miles', 539898, 'M', '1355368461'),
    ('Donald Booth', 895667, 'M', '7736670978'), 
    ('Gina Moore', 900581, 'F', '7018476624'),
    ('James Howard', 460663, 'F', '5461900982'), 
    ('Monica Herrera', 496922, 'M', '2955495768'),
    ('Sandra Montgomery', 479201, 'M', '5111859731'), 
    ('Amber Perez', 403445, 'M', '0602870126')
    ]


    # workers_objects = [Worker('Bob Moore', 330000, 'M', '1635777202')]
    
    workers_objects = [Worker(*x) for x in persons]
    
    for worker in workers_objects:
        worker.get_info()
    """


  




    # print(persons[0][1])

    # for person in persons:
    #     workers_objects.append('')
    
    # cat = Cat()
    # cat.show_breed()

    # tom = Cat()
    # print(isinstance(tom, Cat))

    # tom.show_name()
    # tom.set_value('Tom')
    # tom.show_name()

    # leo.score(700)
    # assert leo.goals == 700
    # leo.make_assist(500)
    # assert leo.assists == 500

    # leo.statistics()

if __name__ == '__main__':
    main()