【问题标题】:Python object as an optional argument of a class instructorPython 对象作为课堂讲师的可选参数
【发布时间】:2023-04-02 06:36:01
【问题描述】:

当创建一个类的新实例(比如 A)时,我希望另一个类的实例(比如 B)成为构造函数的可选参数。如果 B 作为参数给出,那么我希望 A 的构造函数指定 B 属于 A。如果没有作为参数给出,我希望我的构造函数创建一个与 where B 相同的类的新实例(比如 C)属于并指定这个新实例属于 A。

更具体地说,我正在处理一家医院的到达流程。到达是根据随机过程发生的。我希望能够指定 arrival 事件是否与已经存在的 customer 相关(在这种情况下,我应该将其作为参数给出)或者它将是一个新的 customer,其中如果我的arrival 构造函数应该创建一个customer. 的新实例

【问题讨论】:

  • 为什么B 类应该关心客户是新客户还是现有客户?如果它代表一个客户就应该足够了,并且B可以有一个属性表明它是否是一个新客户
  • B,不在乎,A 可以。
  • 所以在B 上有一些属性表明它是否是新的,你可以让A 用一种方法检查它,我认为你让这比它需要的更复杂
  • 你不能让B成为A的成员吗?
  • 我仍然相信我的解决方案是可行的。让我发布代码 sn-p 并让我知道您的想法。如果不是你的意思,我就删了

标签: python object optional-arguments


【解决方案1】:
class A:
    def __init__(self, b=None):
        if b is None:
            self.b = B()
        else:
            self.b = b

【讨论】:

  • 他不想也检查它是否已知吗?
  • 如果没有参数传递给 A,它是未知的。否则就是这样。
  • @user8426627,不,这很好。
【解决方案2】:

到达是根据随机过程发生的。我希望能够指定到达事件是否与已经存在的客户有关(在这种情况下,我应该将其作为参数给出)或者它将成为新客户,在这种情况下,我的到达构造函数应该创建一个新的客户实例。

这只是 dict 和 setdefault 的用法:

customers = {}

for co in all_customers:

known_customer = customers.setdefault(hash(co), customer(co))

或者如果您确实想将其作为构造函数:

class arrival:

known_cos = {}# quasi static

def __init__(self, co)

  self.customer = known_cos.setdefault(hash(co) , customer(co))

【讨论】:

    猜你喜欢
    • 2010-10-16
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    相关资源
    最近更新 更多