Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วิธีแปลงสตริงเป็นออบเจ็กต์คลาสใน Python

เมื่อได้รับสตริงเป็นอินพุตจากผู้ใช้ และต้องการแปลงเป็นออบเจ็กต์คลาส หากมีคลาสชื่อนั้นอยู่ในเนมสเปซปัจจุบัน สามารถทำได้ 2 วิธีหลัก

วิธีที่ 1: ใช้ eval()

class Foobar:
    pass

print(eval("Foobar"))
print(type(Foobar))

ผลลัพธ์

__main__.Foobar <type 'classobj'>

วิธีที่ 2: ใช้ getattr() กับ sys.modules

import sys

class Foobar:
    pass

def str_to_class(class_name):
    return getattr(sys.modules[__name__], class_name)

print(str_to_class("Foobar"))
print(type(Foobar))

ผลลัพธ์

__main__.Foobar <type 'classobj'>

วิธีที่ 2 ปลอดภัยกว่า eval() เนื่องจากไม่ได้รันโค้ดโดยตรง