将数据从一个类方法传递到另一个类方法

2024-09-30 05:29:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习Python和类,遇到了一个需要帮助的挑战

当我试图将数据从一个类方法传递到另一个类方法时,我遇到了一个错误,告诉我它错过了一个位置参数

例如:

class Student:
    def __init__(self, name):
        self.name = name

    def pass_to_dl(self):
       DataLayer.Datalayer.create_dict_entry(self.name)



class Datalayer:
   def __init__(self):
        self.dict = {}

   def create_dict_entry(self, name):
       new_name = {"name":name}
       self.dict.update(new_name)


new_student = Student("some_name")

我得到的错误是:

TypeError: create_new_student() missing 1 required positional argument:

我假设这是因为create_dict_条目需要两个参数,而我只发送一个

现在,如果我做两件事,我就能克服这个问题

  1. 使DataLayer中的create_dict_项为静态
  2. 将dict移到数据层类之外 但老实说,我认为这对我来说似乎不是正确的方法

我很想听听你对这件事的看法

thnx

< P>我们不希望学生从DATALALER继承,因为我认为数据层是一个不相关的类,它只保存我获得的数据,如学生、教师等。

Tags: 数据方法nameselfnew参数initdef
1条回答
网友
1楼 · 发布于 2024-09-30 05:29:27

不确定这是您想要的方式,但如果我正确理解您试图做的事情,我认为您希望使用继承

class Datalayer:
    def __init__(self):
        self.dict = {}

    def create_dict_entry(self, name):
        new_name = {"name":name}
        self.dict[self.name] = new_name

class Student(Datalayer):
    def __init__(self, name):
        super().__init__()
        self.name = name

    def pass_to_dl(self):
        self.create_dict_entry(self.name)

因此,在本例中,Student是您的“子类”(这就是为什么要传递Datalayer作为其参数)。在__init__中,您想调用super(Student, self).__init__()(或者只super().__init__()来实例化您的“父类”Datalayer,这样您就可以访问触发器的__init__函数

您可能需要阅读一些其他示例来正确理解它(https://realpython.com/python-super/

相关问题 更多 >

    热门问题