为什么不用静态方法?

来源:1-3 实战:封装数据库连接池

weixin_慕勒8187086

2020-05-28 04:30:50

UserDao 中的longin 和search_user_role这两个方法 为什么不直接用静态方法? 

完全不需要实例化啊?

还是说这里使用静态方法有什么不好的地方?


写回答

2回答

好帮手慕笑蓉

2020-05-28

同学,你好。一般当方法中既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象(如类属性、类方法、创建实例等)时,是可以定义静态方法的。

如果解决了你的疑惑,请采纳,祝学习愉快~ 

0

weixin_慕勒8187086

提问者

2020-05-28

from db.mysql_db_pool import MysqlDbPool


class UserDao(object):
    """
    deal with t_user table
    """
    __conn = None
    __cursor = None

    @staticmethod
    def login(username, password):
        """
        find wether the user exist in the database
        :param username: username
        :param password: password
        :return: True if the user and password are all corrected, False, if one of them is not correct
        """
        try:
            __conn = MysqlDbPool.get_pool().get_connection()
            __cursor = __conn.cursor()
            sql = (
                "SELECT COUNT(*) FROM t_user WHERE username = %s AND AES_DECRYPT(UNHEX(password), 'HelloWorld') = %s")
            __cursor.execute(sql, (username, password))
            result = __cursor.fetchone()[0]
            return True if result == 1 else False
        except Exception as e:
            print(e)
        finally:
            MysqlDbPool.release(__conn, __cursor)

    @staticmethod
    def search_user_role(username):
        """
        get the urser's role
        :param username: the user's username
        :return: the user's role if not found, return None
        """
        try:
            __conn = MysqlDbPool.get_pool().get_connection()
            __cursor = __conn.cursor()
            sql = ("SELECT r.role FROM t_user u JOIN t_role r ON u.role_id = r.id WHERE u.username = %s")
            __cursor.execute(sql, (username,))
            result = __cursor.fetchone()
            if result is not None:
                result = result[0]
            return result
        except Exception as e:
            print(e)
        finally:
            MysqlDbPool.release(__conn, __cursor)


0

0 学习 · 2669 问题

查看课程