Задать вопрос
  • Как пройти авторизацию на youtube с помощью selenium?

    hardy_99
    @hardy_99
    Михаил Р., И пересборка хрома, подмена файлов, и кастомные комадны для селениума (один из них упомянули, но еще два для полного отключения этого баннера нужно), потом измененеие и даже удаление много чего из сорс кода селениума самого, в добавок к этому кастомный прокси. И это всё деплотся на расбери.

    Написать полностью пошагово не могу займет очень много времени, но вот краткое описание.
    Написано
  • Почему не срабатывает if? как это пофиксить?

    hardy_99
    @hardy_99
    Это не позиция, это курсор. Учи основы и включай голову.
    Написано
  • Срабатывает антивирус на скомпилированный файл python, как исправить?

    hardy_99
    @hardy_99
    В питоне есть компилятор, живи теперь с этим
    Написано
  • Как работают генераторы в Пайтон?

    hardy_99
    @hardy_99 Автор вопроса
    Ок понял. Большое спасибо.
  • Как сделать наложение гиф на на изображение?

    hardy_99
    @hardy_99
    У меня всё работало. Версия PIL: 9.2.0

    Залил в гитхаб, можете форкнуть попробовать. https://github.com/Armen-Jean-Andreasian/Mini-apps...
  • Когда надо использовать инстанс методы и когда класс методы?

    hardy_99
    @hardy_99 Автор вопроса
    LXSTVAYNE, спасибо, но Лутца я недавно послушал аудиокнигу, честно ничего особо нового мне не дало.

    А исходники кастомных библиотек тоже самое что и опен сорс код, там как минимум не сохраняют принципы солид, плюс к этому - отвратительное проектирование, непонятное наименование, отсутствие документации и тд, в зависимости от библиотеки.

    И к этому вопросу кроме "потому что потому" я больше никакого ответа не нашел. Либо думают что мой вопрос связан "а что такое ООП", приходят, понимают что нет - уходят, либо делают вид что "не понимают о чем речь", потому что не знают ответа и их это и не волнует.
    Я этот вопрос даже своему лиду спрашивал, и на стаковерфлоу и теперь спрашиваю на хабре.
    И да "ради читабельности" тоже отвечают. На мой взляд использовние класс методов наоборот повышает и читабельность, и переиспользование и расширямость кода, и даже те самые принципы эжайл если галера не дала времени на документацию. Ну мнения бывают разные, поэтому я ищу конкретный ответ.

    На этом же принципе есть множества паттернов проектирования, и ты все равно создаешь МойКлассМейн(МойКласс) где и разделяешь мейн метод, если не используешь фабрики и тд, но принцип один и тот же. Так зачем нужно использование больше одного инстанс метода?
  • Когда надо использовать инстанс методы и когда класс методы?

    hardy_99
    @hardy_99 Автор вопроса
    LXSTVAYNE, я этим вопросом хочу понять их реальное применение. Но для инстанс методов, кроме обновления переменных класса где ретёрнят селф, другого применения я не нахожу (пропертис не в счет). Абслютно все остальные действия можно выполнить используя один мейн метод и разные класс (даже статик) методы.

    Если вам трудно вкратце рассказать, можете ли отправить название, не знаю базового паттерна класса, или книги и тд я сам посмотрю?

    Реально буду очень рад, если смогу получить внятное объяснение что и почему.
  • Когда надо использовать инстанс методы и когда класс методы?

    hardy_99
    @hardy_99 Автор вопроса
    Максим Припадчев,
    def main(self):
            self.__turn_on()
            self.__move()
            self.__distance_can_drive = self.__calculate_distance(self.__gas)
            return self.get_current_speed


    вот мейн метод из моего кода
    self.__distance_can_drive = self.__calculate_distance(self.__gas)
    он успешно вызвал класс метод и обновил переменную экземпляра.
  • Когда надо использовать инстанс методы и когда класс методы?

    hardy_99
    @hardy_99 Автор вопроса
    То что классовые методы и переменные имеют уже доспут это не секрет.
    Но а тебе и не нужно оперировать экземпляром из класс метода. У тебя есть main метод экземпляра он все и делает. И не важно сколько слоёв абстракции на классе, рано или поздно тебе понадобится через класс и наследование, фабрику, но всё равно будет метод с увловным названием main, который будет менеджерировать флоу твоего класса заставляя его работать. И ему нет разницы отправлять значения в класс метод или в метод экземпляра, он сам внутри экземпляра и имеет доступ ко всему в своем классе.

    Вот и мой вопрос:

    Почему иметь структуру - метод экземпляра1, метод экземпляра2, метод экземпляра3 и еще мейн метод экземпляра

    Если можно иметь просто - класс метод1 , класс метод2, класс метод3 и мейн метод экземпляра у которого селф и он тоже может контролировать состояние экземпляра в том числе обновлять его переменные?
  • Когда надо использовать инстанс методы и когда класс методы?

    hardy_99
    @hardy_99 Автор вопроса
    В коде который я отправил, этот метод был реализован через класс метод:
    @classmethod
        def __calculate_distance(cls, gas):
            """ Consumes 10 litres for 100 km. Returns the distance we can drive in km"""
            return gas / 100
    
        def __init__(self, vehicle_name: str, gas: int):
            self.__gas = gas


    Но его можно написать простым инстанс методом.

    def __init__(self, vehicle_name: str, gas: int):
            self.vehicle_name = vehicle_name
            self.gas = gas
    
            self.distance_can_drive = None
    
        def calculate_distance(self):
            """ Consumes 10 litres for 100 km. Returns the distance we can drive in km"""
            self.distance_can_drive = self.gas / 100
            return self


    Так как оба варианта не противоречат концепции ООП и оба варианта выполняют свою работу:
    Сформулирую вопрос максимально понятно, "В чем смысл использовать инстанс методы если практически любой инстанс метод можно превратить в класс или статический ? Для чего инстанс методы вообще существуют?"

    ООП же не обязывает иметь инстанс методы. А сокрытие (которое в питоне маломальское) можно двоными андерскорами добавить. Полиморфизм и инкапсуляция тоже сохраняются при использовании НЕинстанс методов, поэтому я не совсем понимаю их смысла.
  • Когда надо использовать инстанс методы и когда класс методы?

    hardy_99
    @hardy_99 Автор вопроса
    Спасибо за ответ. Может я буду ошибаться в точных переводах терминов на русском языке, потому что учу на английском.

    Ну давайте посмотрим.
    class Car:
        """
        Напрмер такой базовый паттерн, где всё надо инициализировать вручную:
            c = Car("BMW")
            c.turn_on()
            c.move()
            print(c.get_current_speed)
        """
    
        def __init__(self, vehicle_name):
            self.vehicle_name = vehicle_name
            self.status = False
            self.speed = None
    
        def turn_on(self):
            self.status = True
            return self
    
        def move(self):
            if self.status:
                self.speed = 100
                return self
            else:
                return f"You forgot to turn on the engine. Turn it on using: {self.turn_on.__name__} method"
    
        @property
        def get_current_speed(self):
            if self.speed:
                return f"{self.vehicle_name} is moving at {self.speed} km/h."
            else:
                return f"Your current speed is 0 km/h. Drive the car it on using: {self.move.__name__} method"
    
    
    class AnotherCar:
        """
        И еще такой  паттерн, где всё делает метод мейн (можно даже использовать "питонячее" сокрытие на пол шишечки используя синтаксис дандер методов чтобы было нагляднее):
            a = AnotherCar("BMW")
            print(a.main())
    
            Ответ: BMW is moving at 100 km/h.
        """
    
        def __init__(self, vehicle_name):
            self.__vehicle_name = vehicle_name
            self.__status = False
            self.__speed = None
    
        def __turn_on(self):
            self.__status = True
            return self
    
        def __move(self):
            if self.__status:
                self.__speed = 100
                return self
            else:
                return f"You forgot to turn on the engine. Turn it on using: {self.__turn_on.__name__} method"
    
        def main(self):
            self.__turn_on()
            self.__move()
            return self.get_current_speed
    
        @property
        def get_current_speed(self):
            if self.__speed:
                return f"{self.__vehicle_name} is moving at {self.__speed} km/h."
            else:
                return f"Your current speed is 0 km/h. Drive the car it on using: {self.__move.__name__} method"
    
        def __repr__(self):
            return (f"To move the car use: {self.main.__name__} method. "
                    f"To check the current speed use: {AnotherCar.get_current_speed.fget.__name__} property")


    Теперь к моему вопросу, например у нас есть бензобак. И нам надо рассчитать на сколько километров это хватит. Рассчет этого мы можем поместить как в класс сделав методом класса, так и сделать класс метод и передать в нее цифру.

    class AnotherCarExtended:
        @classmethod
        def __calculate_distance(cls, gas):
            """ Consumes 10 litres for 100 km. Returns the distance we can drive in km"""
            return gas / 100
    
        def __init__(self, vehicle_name: str, gas: int):
            self.__vehicle_name = vehicle_name
            self.__gas = gas
    
            self.__distance_can_drive = None
            self.__status = False
            self.__speed = None
    
    
        def __turn_on(self):
            self.__status = True
            return self
    
        def __move(self):
            self.__speed = 100
            return self
    
        def main(self):
            self.__turn_on()
            self.__move()
            self.__distance_can_drive = self.__calculate_distance(self.__gas)
            return self.get_current_speed
    
        @property
        def get_current_speed(self):
            if self.__speed:
                return f"{self.__vehicle_name} is moving at {self.__speed} km/h."
            else:
                return f"Your current speed is 0 km/h. Drive the car it on using: {self.main.__name__} method"
    
        @property
        def get_distance(self):
            if self.__distance_can_drive:
                return f"Current gas will be enough for {self.__distance_can_drive} kilometres"
    
    
        def __str__(self):
            return (f"To move the car use: {self.main.__name__} method.\n"
                    f"To check the current speed use: {AnotherCarExtended.get_current_speed.fget.__name__} property.\n"
                    f"To check the distance we can drive use: {AnotherCarExtended.get_distance.fget.__name__} property.")


    Следовательно у меня вопрос зачем нужны инстанс методы, если всё можно организовать класс методами?
    Да у класс методов досупа нет к переменным инстанса, но всё же их можно передать вручную, и всё будет тоже самое.

    Спасибо.