python: สร้าง type ใหม่จาก function

ผมต้องการสร้าง function ที่เอาไว้สร้าง class อีกทีแบบ struct ใน ruby (ถ้าผมจำไม่ผิดนะครับ) ก็เลยใช้ function: type(name, bases, dict) มาช่วย จริงๆ แล้วผมก็ไม่รู้หรอกว่าเป็นท่าที่ควรทำหรือเปล่า แต่ก็เอามาโพสก่อน เพราะถ้างมอยู่คนเดียวโอกาสที่จะแก้ไขอะไรก็คงยาก

class DefaultDataModelBase(object):
    def __init__(self, **kwargs):
        for key in self.keys:
            if kwargs.has_key(key):
                self.__dict__[key] = kwargs[key]
            else:
                self.__dict__[key] = None

def defaultDataModel(*keys):
    return type("DefaultDataModel", (DefaultDataModelBase,), dict(keys = keys))

ก็ได้ defaultDataModel ออกมาคล้าย struct ล่ะ เวลาใช้ก็ใช้แบบนี้

Student = defaultDataModel('name', 'score')
a = Student(name="นาย ก.", score = 99.99)
print a.score

อะไรประมาณนี้ จริงๆ อยากจะใช้ namedtuple แต่ว่า Python 2.5 ไม่มีก็เลยลองทำแบบนี้ดู

One thought on “python: สร้าง type ใหม่จาก function

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s