【问题标题】:How to overload constructors in python?如何在python中重载构造函数?
【发布时间】:2021-03-18 08:10:41
【问题描述】:

假设我想在 python 中发送一个列表,并且我将有一个 MyList 类,该类将具有 3 个构造函数。发送空列表不会返回任何内容,发送列表会将其转换为链表,发送链表将复制其项目并从中创建另一个链表

任务 1: i) 创建一个 Node 类,它将包含两个字段,即一个整数元素和对下一个节点的引用。 ii) 创建一个名为 MyList 的链接列表抽象数据类型 (ADT)。列表中的元素是由整数类型键(所有键都是唯一的)和对下一个节点的引用组成的节点。

任务 2: 构造函数:(3)

我的列表 ( ) 前置条件:无。 后置条件:这是 MyList 类的默认构造函数。此构造函数创建一个空列表。

b. MyList (int [] a) 或 Myst(a) 前置条件:数组不能为空。 后置条件:这是 MyList 类的默认构造函数。这个构造函数从一个数组创建一个列表。

c。 MyList (MyList a) 或 MyList(a)

前置条件:列表不能为空。 后置条件:这是 MyList 类的默认构造函数。此构造函数从另一个列表创建一个列表。

【问题讨论】:

  • 这听起来像是您正在学习的 Java 课程被笨拙地转换为 Python 类,而没有考虑两种语言之间的差异。如果是这样,你正在学习的很多东西实际上并不适用于 Python,或者在 Python 中不是一个好主意。
  • Python 没有方法重载。

标签: python data-structures


【解决方案1】:

对于任务 2:您可以通过检查类的构造函数中的输入来尝试这样的事情:

class MyList():
    def __init__(self, a=None):
        self.list = []
        if a is None:
            return
        elif isinstance(a, list):
            if len(a) == 0:
                raise ValueError('List cannot be empty.')
            else:
                self.list = a
            return
        elif isinstance(a, MyList):
            if len(a.list) == 0:
                raise ValueError('List cannot be empty.')
            else:
                self.list = a.list.copy()
        else:
            raise TypeError('Unkonw type for a')

【讨论】:

  • 你能说出 (a.list.copy) 的作用吗?
  • 基本上就是复制MyList对象a的内部列表。如果你不放 .copy(),你只会做一个浅拷贝,当你在 a.list 中改变一个对象时,它也会在 self.list 中改变。检查更多关于深拷贝与浅拷贝的信息。 stackoverflow.com/questions/184710/…
  • @Mikasa 这个答案是否有助于解决问题?如果有,请考虑accepting吧。
猜你喜欢
  • 1970-01-01
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
相关资源
最近更新 更多