Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chuyển đổi chuỗi thành đối tượng class trong Python

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.