为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中使用基类构造函数声明子类的优点

在 Python 中使用基类构造函数声明子类的优点

ABOUTYOU 2021-12-17 15:48:27
使用带参数的基类构造函数方法声明和初始化子类有什么好处:class BaseClass(object):  def __init__(self, a, b):    self.a = a    self.b = bclass SubClass(BaseClass):  def __init__(self, a, b, c, d):    BaseClass.__init__(self, a, b)    # or super().    self.c = c    self.d = dnewSubClassInstance = SubClass("one", "two", "three", "four")完全不使用参数,只是初始化如下:class BaseClass(object):  def __init__(self):    self.a = " "    self.b = " "class SubClass(BaseClass):  def __init__(self):    self.c = " "    self.d = " "newSubClassInstance = SubClass()newSubClassInstance.a = "one"newSubClassInstance.b = "two"newSubClassInstance.c = "three"newSubClassInstance.d = "four"还是仅仅取决于人们打算如何在程序中编写和使用此代码?不过,我主要问的是期望;例如,如果被要求在 Python 中创建这个特定任务,一个人会比另一个人更好吗?
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

您绝对应该在__init__方法中实例化和设置您的类。当类被(创建和)初始化时,如果可能,它应该准备好使用。这是人们对课堂的期望。

对于某些情况,例如,当尝试模仿不可变对象时,__init__()调用后永远不应更新值。初始化后更新也有惩罚,因为更新可能需要触发其他更改。考虑一个 GUI,其中一个输入是正在绘制的窗口的大小。如果在 Window 首次出现后设置,则必须重新绘制。

此外,您的第二种方法在另一方面也很糟糕;你甚至没有self.aself.b之后的__init__()电话,因为你从不打电话BaseClass.__init__()。在继承和覆盖__init__().

您还应该考虑将显式调用替换BaseClass为调用super()(正如您在评论中所写的那样),因为这样可以更好地处理多重继承。


查看完整回答
反对 回复 2021-12-17
  • 1 回答
  • 0 关注
  • 141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信