我可以为派生自peewee.Model的类添加方法和属性吗

6 投票
1 回答
2386 浏览
提问于 2025-04-21 09:46

我正在开发一个使用Cherrypy和Peewee的应用程序,想知道我的做法是否正确,或者是否存在危险。

我找到的所有Peewee类的例子里,只有Meta子类和<xxx>Field属性。我从来没有见过有辅助方法或属性的例子。

我尝试自己做了一些,结果是可以的!

效果很好,我觉得很方便,但我担心这样做会出问题。

所以我的问题是:我可以在从peewee.Model派生的类中添加任意多的属性和方法吗?这样我就可以像下面的代码片段那样做一些很酷的事情?

还是说在这方面有什么限制和指导原则?

class PeeweeModel(peewee.Model):
    class Meta:
        database = db

class TempFile(PeeweeModel):
    file_type = peewee.IntegerField()
    original_file_name = peewee.CharField()
    temp_file_name = peewee.CharField()

    DRAWING = 1
    PDF = 2

    def href(self, settings):
        if(self.file_type == DRAWING:
            return self.temp_file_name
        elif(self.file_type == PDF:
            if settings.show_pdf:
                return self.temp_file_name
            elif settings.show_bitmap:
                bitmap = TempFile.create_bitmap_from_pdf(self.temp_file_name)
                return bitmap.temp_file_name

    @staticmethod
    def create_bitmap_from_pdf(self, file_name):
        [...]

补充:

我希望能得到关于构造函数的评论。

例如,我想同时做到这两点:

tmp = TempFile(file_name)                            # and run my own constructor
tmp = TempFile(original_file_name=file_name, [...])  # and run Peewee's constructor

1 个回答

4

当然可以!模型其实就是普通的Python类,所以你可以像对待其他类一样对待它们,给它们添加方法、属性和特征等等。

撰写回答