文章内容

2023/3/29 13:01:35,作 者: 黄兵

Python 静态方法与实例方法

UK Web Hosting Services

有一个模型初始化,第一种写法如下:

class TicketStatus(db.Model):
    __tablename__ = 'ticket_status'
    __table_args__ = {'comment': '工单状态'}
    id = db.Column(db.SmallInteger, primary_key=True)
    status = db.Column(db.String(16), unique=True, comment='工单状态:正在处理、已处理、关闭')
    code = db.Column(db.String(16), unique=True, index=True)
    tickets = db.relationship('Tickets', backref='status', lazy="dynamic",
                              cascade='all, delete-orphan', passive_deletes=True)

    @staticmethod
    def insert_ticket_status():
        ticket_status = [{'status': '已提交', 'code': 'submitted'}, {'status': '正在处理', 'code': 'processing'},
                         {'status': '已处理', 'code': 'processed'}, {'status': '已关闭', 'code': 'closed'}]
        for item in ticket_status:
            status = TicketStatus.query.filter_by(code=item['code']).first()

第二种写法:

class TicketStatus(db.Model):
    __tablename__ = 'ticket_status'
    __table_args__ = {'comment': '工单状态'}
    id = db.Column(db.SmallInteger, primary_key=True)
    status = db.Column(db.String(16), unique=True, comment='工单状态:正在处理、已处理、关闭')
    code = db.Column(db.String(16), unique=True, index=True)
    tickets = db.relationship('Tickets', backref='status', lazy="dynamic",
                              cascade='all, delete-orphan', passive_deletes=True)

    def insert_ticket_status(self):
        ticket_status = [{'status': '已提交', 'code': 'submitted'}, {'status': '正在处理', 'code': 'processing'},
                         {'status': '已处理', 'code': 'processed'}, {'status': '已关闭', 'code': 'closed'}]
        for item in ticket_status:
            status = self.query.filter_by(code=item['code']).first()

这两种写法那种写法好,为什么?

这两种写法的区别在于一个是实例方法,一个是静态方法。

实例方法需要先创建一个实例对象,然后才能调用这个方法,而静态方法可以直接通过类名调用。

在以上代码中,第二种写法是一个实例方法,需要通过创建一个实例对象来调用该方法,而第一种写法是一个静态方法,不需要创建实例对象,可以直接调用该方法。

由于这个方法(静态方法,第一种方案)不需要访问实例属性或方法,因此静态方法是更好的选择。它具有更好的性能和可读性。

静态方法不需要创建对象,因此它们不需要实例化,并且不需要绑定到类或实例。

以上是关于这两种写法的理解。


参考资料:

1、chatGPT

分享到:

发表评论

评论列表