python魔法方法

from typing import List
class ShoppingCart:
    def __init__(self,items: List[str]):# List[str]是一个类型提示,告诉Python程序员(和某些工具)这个参数应该是一个包含字符串的列表
        self.items = items

    def __add__(self,another_cart):
        new_cart = ShoppingCart(self.items+another_cart.items)
        return new_cart

cart1 = ShoppingCart(["apple","banana"])
cart2 = ShoppingCart(["eggplant","watermelon"])
new_cart = cart1 + cart2

from typing import List 是 Python 中用于类型注解的一部分,它来自于 Python 的 typing 模块。这个模块提供了一系列的标准类型注解,旨在帮助开发者在编写代码时明确变量的预期类型,从而提高代码的可读性和健壮性。

在 Python 中,尝试使用 + 操作符对两个对象进行操作时,Python 会查找这两个对象的 __add__ 方法 。Python 会自动调用 cart1 的 __add__ 方法,并将 cart2 作为参数传递给它。然后,__add__ 方法会返回一个新的 ShoppingCart 实例,该实例包含了 cart1 和 cart2 中所有商品的合并列表。

接着想打印输出new_cart查看购物车内容,得到一串内存地址

如何解决? 在类中定义一个__str__方法。它定义了当对象被转换为字符串时应该返回什么。这通常发生在使用 print() 函数、字符串格式化(如使用 str.format() 或 f-strings)或将对象直接传递给需要字符串参数的函数时。

    def __str__(self):
        return f'Cart({self.items})'

当 print(new_cart) 被调用时,print() 函数需要将其参数转换为一个字符串以便输出。由于 new_cart 是一个 ShoppingCart 类的实例,Python 会查找该类的 __str__ 方法(如果已定义)来执行这个转换。

__str__ 方法返回了一个f-string,该f-string将 self.items 列表转换为了一个字符串表示,并将其嵌入到 'Cart(...)' 模板中。

print(new_cart)
#输出:Cart(['apple','banana'eggplant''watermelon'])

当你想查看购物车中有多少东西

    def __len__(self):
        return len(self.items)

# ...
print(len(new_cart))
# 4

希望像调用函数那样调用实例:

#..
    def __call__(self,item):
        self.items.append(item)


cart1 = ShoppingCart(["apple","banana"])
cart2 = ShoppingCart(["eggplant","watermelon"])
new_cart = cart1 + cart2
new_cart('orange') #通过__call__实现 往购物车中加了一个橘子
print(len(new_cart))
# 5

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值