即使没有直接调用“ if”,它们是否也可以隐式访问类的特殊方法?

有风的71

我不明白for循环中的代码如何知道该类的实例是否真实。我的理解可能是错误的,但是我认为正在发生的事情是:对bool的调用会调用经过更改的特殊方法bool,该方法已被修改为使用实例上内置的len。但是在类之外,当我们进入for循环和if条件时,我不知道“ if”如何知道该命令是否为真,除非它调用了特殊方法bool(在幕后)。

如果这不是这个问题的论坛,我深表歉意,但我对所需的术语知之甚少,无法在google或一本好书上找到答案,以了解我对python的理解。

class Order:
    def __init__(self, cart, customer):
        self.cart = list(cart)
        self.customer = customer

   # def __bool__(self):
          #print("\'__bool__ got called\'")
          #return len(self.cart) > 0
        
order1 = Order(['banana', 'apple', 'mango'], 'Real Python')
order2 = Order([], 'Python')


for order in [order1, order2]:
    if order:
        print(f"{order.customer}'s order is processing...")
    else:
        print(f"Empty order for customer {order.customer}")


print(bool(order2))
尼兹皮兹

请参考Python3文档

简而言之,您对象的基类具有__bool__可以实现定义真实性的功能。如果未在类型上定义,则将调用基类实现。通过调用来实现您所说的功能__len__

如果既未定义__bool____len__未定义,则所有类对象均被视为true。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么构造函数将始终具有与类相同的名称,以及如何隐式调用它们?

我可以在没有beego中的路由器的情况下直接从主机直接调用控制器吗

没有方法的类是否有特殊名称?

即使我没有显式调用$ apply()也会出现“ $ apply已经在进行中”错误

即使没有匹配项,如何始终在receive()中调用方法

当为类调用隐式toString()时,我可以列出所有情况吗?

即使有DoNotCallBase时的Nsubstitute调用方法

为什么即使之前没有调用CoInitializeEx也可以调用StringFromCLSID?

即使没有子类覆盖它,方法实际上也会被调用吗?

类是否可以在协议扩展上显式调用方法?

当类依赖于隐式时,是否有惯用的方法将类转换为对象?

即使没有调用方法,mockito never()也会被调用吗?

是否可以在没有网关API的情况下直接调用AWS Lambda?

有什么方法可以从TimeToGuess类访问我的guesss_left变量,以便何时需要检查它们是否用完了猜测

有没有一种方法可以隐式类覆盖默认实现

有没有一种方法可以在C#中定义隐式运算符,该隐式运算符定义从Expression到选定类的转换

即使没有内容也可以滚动页面

有没有一种方法可以授权直接调用Paypal API的订单

Rubocop:即使父类没有初始化,也要调用父类来初始化父类的状态

了解Enum类中的Java 7隐式方法调用

即使没有传入消息,也可以增强ASIO UDP客户端async_receive_from调用处理程序

没有“直接访问”的Java ArrayList

Unhibernate Windows没有直接访问

Scala中没有括号的方法调用(带有隐式参数)

测试项目访问私有静态方法时出现问题,即使我从未直接调用它

从main隐式调用类中的方法

如果没有处理程序,Azure IoT 中心直接方法调用会发生什么

GluonTS 转换函数如何从 DeepARE 类自动调用,即使我没有使用对象来调用它?

有没有办法使用 lsp4e 直接调用语言服务器方法?