采用 1 个位置参数,但 2 个参数给出了 dict 错误

takes 1 positional argument but 2 were given error for dict

如何在cs列表中添加两个字典

我想在addcoursess函数中添加两个字典到cs列表,但是报错 文本错误:采用 1 个位置参数,但给出了 2 个

主要名单:

    cs = [
    {
        "title": "Python",
        "teacher": "Amiri",
    },
    {
        "title": "HTML",
        "teacher": "Dehyami",
    },
    {
        "title": "PHP",
        "teacher": "Enayati"
    }
]


class User:
    def __init__(self, fisrtname, lastname):
        self.fname = fisrtname
        self.lname = lastname

    def fullname(self):
        print(f"my fullname is {self.fname} {self.lname}")

class Student(User):
    def __init__(self, fisrtname, lastname, email):
        super().__init__(fisrtname, lastname)
        self.email = email
        self.coursess = []

    def fullname(self):
        print("i am an student")
        super().fullname()

    def printcoursess(self):
        if self.coursess:
            for course in self.coursess:
                print("Coursess : " + course["title"])
        else:
            print("There is no course")

这是错误的class

class Teacher(User):
    def __init__(self, fisrtname, lastname, code):
        super().__init__(fisrtname, lastname)
        self.code = code

    def addcoursess(item):
        dict = {}
        dict.update(item)
        cs.append(dict)
        print(dict)
    def fullname(self):
        print("i am an teacher")
        super().fullname()


t1 = Teacher("abolfazl", "zaker", 3223)

在此处添加课程功能

t1.addcoursess({"title": "Java", "teacher": "ganjeali"})

print(cs)

你错过了函数定义中的 self 参数。你的老师 class 应该是这样的:

class Teacher(User):
    def __init__(self, fisrtname, lastname, code):
        super().__init__(fisrtname, lastname)
        self.code = code

    def addcoursess(self, item):
        dict = {}
        dict.update(item)
        cs.append(dict)
        print(dict)

    def fullname(self):
        print("i am an teacher")
        super().fullname()

或者如果你不想传递 self,class 应该用 @staticmethod 装饰器定义,如下所示:

class Teacher(User):
        def __init__(self, fisrtname, lastname, code):
            super().__init__(fisrtname, lastname)
            self.code = code

        @staticmethod
        def addcoursess(item):
            dict = {}
            dict.update(item)
            cs.append(dict)
            print(dict)

        def fullname(self):
            print("i am an teacher")
            super().fullname()

关于静态方法的信息在这里:https://docs.python.org/3/library/functions.html#staticmethod

您的老师 class 方法缺少 self,关键字。它应该如下所示

class Teacher(User):
def __init__(self, fisrtname, lastname, code):
    super().__init__(fisrtname, lastname)
    self.code = code

def addcoursess(self, item):
    dict = {}
    dict.update(item)
    cs.append(dict)
    print(dict)

def fullname(self):
    print("i am an teacher")
    super().fullname()

您忘记在 Teacher class 的 addcoursess 方法中添加 self,应该是 addcourse(self,item):

这是您的完整工作代码。

cs = [
    {
        "title": "Python",
        "teacher": "Amiri",
    },
    {
        "title": "HTML",
        "teacher": "Dehyami",
    },
    {
        "title": "PHP",
        "teacher": "Enayati"
    }
]


class User:
    def __init__(self, fisrtname, lastname):
        self.fname = fisrtname
        self.lname = lastname

    def fullname(self):
        print(f"my fullname is {self.fname} {self.lname}")

class Student(User):
    def __init__(self, fisrtname, lastname, email):
        super().__init__(fisrtname, lastname)
        self.email = email
        self.coursess = []

    def fullname(self):
        print("i am an student")
        super().fullname()

    def printcoursess(self):
        if self.coursess:
            for course in self.coursess:
                print("Coursess : " + course["title"])
        else:
            print("There is no course")

class Teacher(User):
    def __init__(self, fisrtname, lastname, code):
        super().__init__(fisrtname, lastname)
        self.code = code

    def addcoursess(self, item):
        dict = {}
        dict.update(item)
        cs.append(dict)
        print(dict)
    def fullname(self):
        print("i am an teacher")
        super().fullname()


t1 = Teacher("abolfazl", "zaker", 3223)

t1.addcoursess({"title": "Java", "teacher": "ganjeali"})

print(cs)

您忘记了声明中的self

 def addcoursess(self, item):

我的结果如下:

[{'teacher': 'Amiri', 'title': 'Python'}, {'teacher': 'Dehyami', 'title': 'HTML'}, {'teacher': 'Enayati', 'title': 'PHP'}, {'teacher': 'ganjeali', 'title': 'Java'}]