Как в python создать объект класса через метод

class Dog:

    def __init__(self, name: str) -> None:
        self.name = name
        self.bark = False

    def sound(self):
        self.bark = True
        return 'Woof'


mops = Dog.sound('Boba')    # Нужно создать объект таким образом
print(mops)

Ответы (1 шт):

Автор решения: CrazyElf

Можно возвращать из метода, меняющего состояние, сам объект. Предварительно создать объект, и потом поменять его свойство:

class Dog:

    def __init__(self, name: str) -> None:
        self.name = name
        self.bark = False

    def sound(self) -> Dog:
        self.bark = True
        return self

    def __str__(self):
        return f"{self.name} {'barking' if self.bark else 'silent'}"

smalldog = Dog('Fluffy')
print(smalldog)

mops = Dog('Boba').sound() # создаём объект, потом меняем свойство
print(mops)

Вывод:

Fluffy silent
Boba barking

Но можно сделать и с тем вызовом, как вы хотите, тогда придётся создавать объект прямо в методе, если я не путаю, такой подход называется "фабрика объектов":

class Dog:

    def __init__(self, name: str) -> None:
        self.name = name
        self.bark = False

    def sound(name: str) -> Dog:
        dog = Dog(name)
        dog.bark = True
        return dog

    def __str__(self):
        return f"{self.name} {'barking' if self.bark else 'silent'}"

smalldog = Dog('Fluffy')
print(smalldog)

mops = Dog.sound('Boba') # сразу создаём объект с нужным свойством
print(mops)

Вывод:

Fluffy silent
Boba barking
→ Ссылка