我试着从这个视频中学习OOP https://www.youtube.com/watch?v=Ej_02ICOIgs&t=143s&ab_channel=freeCodeCamp.org

1:30:00是与我的问题相关的内容,但在此代码片段中,我将删除与问题无关的任何内容,仅代码片段就应该提供足够的上下文.

我的父类以名称、价格和数量作为参数. 我的子类有一个唯一的参数名为"BREAKED_PHONE". 问题集中在repr个左右

这是视频中显示的代码(排除不相关的东西)

class Item:
    all = []
    def __init__(self, name:str , price: float , quantity:int):
        #Assign to self object
        self.name = name
        self.price = price 
        self.quantity = quantity

        #action to execute
        Item.all.append(self)

    def __repr__(self):
        return f'{self.__class__.__name__}("{self.name}", {self.price}, {self.quantity})'

class Phone(Item):
    def __init__(self, name:str , price: float , quantity:int, broken_phone=0):
        #call to super function to have access to all attributes
        super().__init__(
            name, price, quantity
        )

        #Assign to self object
        self.name = name
        self.price = price 
        self.quantity = quantity

因此,子类(Phone)也应该继承父类(Item)的repr,但当我调用Phone.all时,它只返回 f'{self.__class__.__name__}("{self.name}", {self.price}, {self.quantity})'

排除子类参数(BREAKED_PHONE)是正常做法吗?子元素们的阶级争论不应该是这样的吗? f'{self.__class__.__name__}("{self.name}", {self.price}, {self.quantity}, {self.broken_phone})'

所以我的问题是,像这样排除它是正常的吗?如果不是,我应该如何解决这个问题.视频只是告诉我在家长类中只使用repr,而不解决这个问题.

推荐答案

像这样把它排除在外,这正常吗?

没有任何东西被"排除在外".

Phone没有定义它自己的__repr__方法,所以它使用从Item继承的方法,这与您定义它要做的事情完全相同.它对broken_phone属性一无所知.

正如您所期望的那样,__repr__并不只是返回当前的所有实例参数.(即使它这样做了,Phone.__init__()实际上也不会将broken_phone参数保存为属性.这一论点从未被使用过.)

要解决此问题,请执行以下操作:

  1. Phone.__init__中分配self.broken_phone = broken_phone
  2. 定义Phone.__repr__以返回所需的输出.

Python相关问答推荐

Locust请求中的Python和参数

根据不同列的值在收件箱中移动数据

运行总计基于多列pandas的分组和总和

在Polars(Python库)中将二进制转换为具有非UTF-8字符的字符串变量

如何在虚拟Python环境中运行Python程序?

为什么默认情况下所有Python类都是可调用的?

Stacked bar chart from billrame

在单个对象中解析多个Python数据帧

使用groupby方法移除公共子字符串

使用Python从URL下载Excel文件

try 检索blob名称列表时出现错误填充错误""

提高算法效率的策略?

mdates定位器在图表中显示不存在的时间间隔

Python Mercury离线安装

使用python playwright从 Select 子菜单中 Select 值

PYTHON中的pd.wide_to_long比较慢

如何关联来自两个Pandas DataFrame列的列表项?

具有不同坐标的tkinter canvs.cocords()和canvs.moveto()

Groupby并在组内比较单独行上的两个时间戳

PYODBC错误(SQL包含-26272个参数标记,但提供了235872个参数,HY 000)