Python内部类自身

标签 python mysql python-3.x class

内部类的does方法需要一个自变量,但是已经给定了。 主要思想是拥有一个类似模块的 Django 数据库模型。 拥有一个包含用户数据的 User 类,并使用相同的类查询所有结果

class User:
    def __init__(self, name, password):
        self.name = name
        self.password = sha256.encrypt(password)

    def verify_password(self, psw):
        return sha256.verify(self.password, psw)

    def save(self):
        cur.execute("INSERT INTO user (name, password) VALUES (?,?)", (self.name, self.password))
        conn.commit()

    class query(object):
        def __init__(self):
            self.data = cur.execute("SELECT * from user")
            self.test = "test"

        def first(self):
            return self.data.fetchone()

        def all(self):
            return self.data.fetchall()


print(User.query.all())

我收到以下错误:

Traceback (most recent call last):
  File "C:\Users\Zsolt\Desktop\api\model.py", line 34, in <module>
    print(User.query.all())
TypeError: all() missing 1 required positional argument: 'self'

最佳答案

对于这个答案,我已将您的代码简化为更通用的片段:

class A:
  class B:
    def __init__(self):
      print("query the database")

    def first(self):
      print("return the first match only")

    def all(self):
      print("return all matches")

<b>A.B.all()</b>

在突出显示的行中,您永远不会创建类 B 的实例!标记的行应该是 A.B().all(),创建类型为 A.B 的对象,然后在该实例上调用方法。

注意:在您的代码段中,您需要将 User.query.all() 更改为 User.query().all()

关于Python内部类自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52679284/

相关文章:

python - 有没有办法让 git commit --verbose 在使用预提交 Hook 时显示更新的差异?

python - 将 python 对象 __str__ 写入文件

python - Python3 中的字符串中包含元组的列表

Python-%粘贴

mysql - Django:将两个查询(两个不同模型)中的项目组合在一起

python - 拆分数据框中的字符串

python - C++ 和 Python 中的交换有什么区别?

python - 如何在将数据从python推送到sql server时避免bcpy(批量复制python)中的dbo

mysql - SQL 分数排名

mysql - 用于跟踪事件的数据库设计