文章内容
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
评论列表