Khi nhận một tên class dưới dạng chuỗi từ người dùng, bạn có thể lấy đối tượng class tương ứng từ namespace hiện tại bằng một số cách:
Cách 1: Sử dụng eval() (không khuyến khích do rủi ro bảo mật)
class Foobar:
pass
print(eval("Foobar")) # __main__.Foobar
print(type(Foobar)) #
Cách 2: Sử dụng getattr() với sys.modules (an toàn hơn)
import sys
class Foobar:
pass
def str_to_class(class_name):
return getattr(sys.modules[__name__], class_name)
print(str_to_class("Foobar")) # __main__.Foobar
print(type(Foobar)) #
Cách 3: Với class trong module khác
import my_module MyClass = getattr(my_module, "ClassName")
Khuyến nghị: Tránh eval() khi xử lý input người dùng. Hãy dùng getattr() hoặc importlib.import_module() cho trường hợp phức tạp.