当前位置: 首页 > 面试题库 >

在python中定义类的“布尔”

彭涵衍
2023-03-14
问题内容

为什么不像天真的预期那样起作用?

class Foo(object):
    def __init__(self):
        self.bar = 3
    def __bool__(self):
        return self.bar > 10

foo = Foo()

if foo:
    print 'x'
else:
    print 'y'

(输出为x


问题答案:

为了与Python 2-3兼容,只需将其添加到示例中:

Foo.__nonzero__ = Foo.__bool__

或将Foo的原始定义扩展为包括:

__nonzero__ = __bool__

当然,您也可以反过来定义它们,方法名称在哪里,__nonzero__然后将其分配给__bool__,但是我认为该名称__nonzero__只是Python根据其与对象的等价性将对象解释为真或假的原始C-
ishness的遗产。零。只需添加上面的语句,您的代码即可在Python 2.x上运行,并且在升级到Python
3.x后(最终将其分配到__nonzero__)自动运行。



 类似资料:
  • 问题内容: 很简单,我正在学习Python,但是找不到可以告诉我如何编写以下内容的参考: 后来: 这是一个具有以下属性的班级团队:名称/徽标/成员 编辑 经过几次尝试,我得到了: 后来 这是Python方式吗?感觉很奇怪(当然来自强类型语言)。 问题答案: 在Python中,通常不编写getter和setter,除非您确实为它们提供了一个简单的实现(此时使用属性描述符)。

  • 问题内容: 有什么办法可以从类声明中引用类名称?一个例子如下: 我有一个读取此信息并进行一些设置的元类,基类实现了一些常用的保存内容。我希望能够创建像这样的递归定义,但是到目前为止,在我的实验中,我一直无法获得想要的效果,通常会遇到“未定义计划”错误。我了解发生了什么,该类的名称不在该类的范围内。 问题答案: 我有一个元类,可以读取此信息并进行一些设置 大多数使用元类的框架都提供了一种解决此问题的

  • C 14的[class]/7中定义了一个标准布局类,如下所示(重点是我的): 标准布局类是这样的类: (7.1)-没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员, (7.2)-没有虚拟函数(10.3)和虚拟基类(10.1), (7.3)-对所有非静态数据成员具有相同的访问控制(第11条), (7.4)-没有非标准布局基类, (7.5)-在大多数派生类中没有非静态数据成员,并且最多有

  • 主要内容:Python类的定义前面章节中已经提到,类仅仅充当图纸的作用,本身并不能直接拿来用,而只有根据图纸造出的实际物品(对象)才能直接使用。因此, Python 程序中类的使用顺序是这样的: 创建(定义)类,也就是制作图纸的过程; 创建类的实例对象(根据图纸造出实际的物品),通过实例对象实现特定的功能。 本节先教大家如何创建(定义)一个类,如何使用定义好的类将放到后续章节进行讲解。 Python类的定义 Python 中定

  • 问题内容: 我对python相对较新,并且在命名空间方面遇到一些问题。 问题答案: 由于不知道是谁,因此您看到的味精应该在调用时发生(调用很好),请将其更改为:

  • 以下代码不能按预期工作。显然,我不能在类定义中使用类自己的类型: 运行它的结果是: 此外,使用检查代码会返回: 如何将此代码更正为对Python和mypy有效?