【问题标题】:Inherit Variables from Parent Class从父类继承变量
【发布时间】:2018-06-07 15:29:03
【问题描述】:

我正在研究如何从父类继承变量。

我有两个类(简单但原理相同):

class Database(object):

    def __init__(self, post, *args, **kwargs):
        self.post = post

        self.report()

    def report(self):
        #... obtain variables from post ...
        self.database_id = self.post['id']

        #... save data to database



class PDF(Database):

    def __init__(self, post,  *args, **kwargs):
        Database.__init__(self, post, *args, **kwargs)

       #... if i try to access self.database_id now, it returns an error ...
       print(self.database_id)

实例化脚本:

        Database(request.POST)
        PDF(request.POST)

我尝试过仅实例化 CreatePDF,因为我认为 Database.__init__(self, post, *args, **kwargs) 行将是 Database 类,但这也不起作用。

我正在尝试找到最 Pythonic 的继承方式。我显然可以从传递给 PDF() 的 post dict 中获取 self.database_id,但是如果我可以使用继承,我看不出这样做两次的意义。

谢谢

【问题讨论】:

  • 您发布的代码(一旦您解决了命名问题 - 'CreatePDF' vs 'PDF' - 以及 PDF.__init__ 中缺少的 argskwargs 名称)不会“返回错误"(至少当它传递一个带有“id”键集的类似字典的对象时不会)。如果您希望得到有用的答案,请发布一个 REAL mcve 以及完整的错误消息和回溯 - 哦,是的,“request.POST”也是。请注意,您的设计还有一些其他明显的问题,但这是另一个问题。
  • CreatePDF 是什么?

标签: python oop


【解决方案1】:

用途:

class PDF(Database):
    def __init__(self, post, *args, **kwargs):
        # Stuff
        super().__init__(post, *args, **kwargs)

实例化继承类的正确方法是调用 super().init(args),在这种情况下调用 Database.init 因为方法解析顺序.

http://amyboyle.ninja/Python-Inheritance

【讨论】:

  • 我会要求重新考虑否决票,因为在我回答后对原始问题进行了编辑......我的回答正确 - 问题是 OP没有调用 super()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
相关资源
最近更新 更多