Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 定义对象何时包含在类中_Python_Class_Overriding - Fatal编程技术网

Python 定义对象何时包含在类中

Python 定义对象何时包含在类中,python,class,overriding,Python,Class,Overriding,根据我所研究的,在python中创建类时,大多数操作符和方法都可以被重写。例如,通过使用\uuuuu添加(self,other)和其他 我的“问题”(更像是我不太明白它是如何完成的)是为了验证我的类中有什么东西,我显然必须使用\uuuuuuuuuuuuuuuuuuu(self,theThing)。 唉,我认为这应该在代码本身中返回一个布尔值,但从我看到的示例代码来看,如下所示: def __contains__(self, posORname): return [node.getId(

根据我所研究的,在python中创建类时,大多数操作符和方法都可以被重写。例如,通过使用
\uuuuu添加(self,other)
和其他

我的“问题”(更像是我不太明白它是如何完成的)是为了验证我的类中有什么东西,我显然必须使用
\uuuuuuuuuuuuuuuuuuu(self,theThing)
。 唉,我认为这应该在代码本身中返回一个布尔值,但从我看到的示例代码来看,如下所示:

def __contains__(self, posORname):
     return [node.getId() for node in self.tree if node.getId() == posORname or node.getName() == posORname]
因此,我返回的是一个元组,其中包含所述项所在位置的Id。 有人能解释为什么这样做而不是返回
True
False
?如果是这样的话,难道仅仅使用in不就可以隐式地获得结构中某个项的索引吗

谢谢:D

应返回布尔值。在您的例子中,
\uuuuuu contains\uuuuu()
正在返回一个列表,其中包含与
posORname
匹配的任何树节点。因此,它基本上只是实现
\uuuu contains\uuu()
的一种惰性方式,因为在布尔上下文中:

  • 空列表相当于
    False
  • 非空列表相当于
    True
  • 虽然可以让
    \uuuu contains\uuuu()
    返回带有匹配树节点的索引或ID的数据结构,但
    中的
    操作符并不关心;它仅用于检查对象是否包含项。另外,
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu


    相反,您最好实现一个单独的方法来获取节点的索引/id。

    根据通常的规则将
    \uuuuu包含的结果转换为布尔值,这样,例如,空列表将计为False,而包含某些内容的列表将计为True。例如,如果列表中有任何内容,也就是说,任何项目都符合列表中的标准,那么
    中的
    测试将为真

    这种自动转换为bool的行为似乎没有明确的文档记录,并且与其他操作符(如
    )不同,后者返回返回的内容而不转换为bool。对该行为进行了一些讨论。

    For或两者都应返回true或false。现在的问题是什么是真什么是假

    以下值被认为是错误的:

    • 没有
    • 假的
    • 任何数字类型的零,例如0、0.0、0j
    • 任何空序列,例如,,(),[]
    • 任何空映射,例如,{}
    • 用户定义类的实例,如果该类定义了bool()或len()方法,则该方法返回整数零或bool值False

    您的目标是确定类是否具有特定属性吗?为什么不尝试调用该属性,然后在它不存在时处理一个
    AttributeError
    异常呢?更确切地说,我使用的是一个树作为抽象数据类型,每个节点都有“n”个子节点,因此不必创建一个函数,如:def mytreeconcains(self,value)我希望能够用一个“in”来调用它,比如:
    thisttree=Tree(),如果“Harry”在thisttree:print(“Harry在树中”)
    一个看起来很奇怪的
    \uuuu包含的方法<代码>返回any(self.tree中节点的[node.getId()或node.getName()]中的posOrName)
    就足够了。一般来说,使用
    \uuuu contains\uuuu
    的上下文只会查看它返回的列表的布尔值(空
    ,非空
    ),因此它不是不正确的,但它做的工作远远超出了必要的范围。啊,我明白你的意思了,简而言之,这过于复杂了,它基本上是真的假,谢谢:DThanks:D我想我可能会在类的名称空间中创建一个动态变量,用于存储最近的“contains()”调用的id。谢谢您提供的信息和链接:D