создать класс без `class`
мне дали задание где нужно реализовать класс и некоторые методы, это я сделал, но там было условие что это надо сделать без class т.е. я не могу писать так
class MyClass:
...
помогите пожалуйста
Ответы (4 шт):
Автор решения: Vasyl Kolomiets
→ Ссылка
Вот пример
def double(x):
return x*2
like_list = type("List", (list,), {"z":5, "double":double})
d = like_list("fdgfdgrtg")
print(d)
выдаст
['f', 'd', 'g', 'f', 'd', 'g', 'r', 't', 'g']
а
d.z
выдаст 5
проверьте что будет с
d.double()
Обращаю внимание, что первый аргумент функции передаваемой в словаре как будущий метод воспринимается как self, это если нужны более сложные операции.
И да - __init__() не пробовал пока добавлять. Так что все переменные - классовые ))
Автор решения: Victor VosMottor
→ Ссылка
Занятный костыль. Можно воспользоваться функцией как объектом:
from types import MethodType
def f():
return
f.param = 'val'
f.method = MethodType(lambda obj, x: print(obj.param + x), f)
# Теперь f не функция, a класс прикольно, да?
f.method('ue')
out:
value
Спасибо большое @mkkik за подсказку.
Автор решения: gil9red
→ Ссылка
Вариант с exec и eval:
def get_class(name: str) -> type:
exec(f'''\
class {name}:
def __init__(self, x):
self.x = x
def double(self):
return self.x * 2
''')
return eval(name)
MyClass = get_class('MyClass')
print(MyClass)
# <class '__main__.MyClass'>
x = MyClass(10)
print(x.double())
# 20
Автор решения: Vlad
→ Ссылка
получился такой код:
def __init__(self, x):
self.x = x
def __str__(self):
return str(self.x)
def double(self):
self.x *= 2
MyClass = type("MyClass", (), {"__init__": __init__,
"__str__": __str__,
"double": double})
obj = MyClass(5)
print(obj)
obj.double()
print(obj)