当__init__将数组作为参数时,Python的__repr__方法

如何解决当__init__将数组作为参数时,Python的__repr__方法

我对使用Python进行OOP相当陌生,并试图了解__repr__方法在该特定实例中应如何输出。

初始化播放列表类时,可以将包含歌曲对象的数组作为参数传递。您也可以不传递任何内容作为参数,并使用单独的add_song方法将歌曲对象添加到播放列表。

但是,在这种情况下,我不确定如何设置__repr__方法。如果我传递一个包含10多个歌曲对象的数组,则repr方法的输出将非常大-因为每个歌曲对象本身都有多个参数。

是否有Python的方法?

编辑:为了使我的问题不再那么模糊-根据我的理解,repr方法旨在返回对象的字符串表示形式。就我而言,播放列表对象是作为参数传递给数组的(或者什么也没有)。如果传递数组,则其中包含歌曲对象,它们本身具有许多参数,例如歌曲名称,歌曲语言等。我的问题是在这种情况下是否存在“正确”的方法来设置repr方法-或者这真的取决于我自己决定。

class Playlist:
        
        def __init__(self,songs = None):
            if songs is None:
                self.playlist = []
            else:
                self.playlist = songs
                
        def __repr__(self):
            return (f"{self.__class__.__name__}({self.playlist})")

打印播放列表对象的输出:

播放列表([歌曲(随机歌曲名称1,英语,50),歌曲(随机歌曲名称 2,英语,25)])

解决方法

由您决定。与更人性化的repr相比,str返回的字符串将提供更多的键入信息。如果尺寸受阻,您可以自由选择自己认为最佳的方式。例如,pandas为您提供了一个简短的视图,其中包含其他细节,例如完整尺寸。

>>> df=pd.DataFrame([list(range(5)) for _ in range(500)])
>>> print(repr(df))
     0  1  2  3  4
0    0  1  2  3  4
1    0  1  2  3  4
2    0  1  2  3  4
3    0  1  2  3  4
4    0  1  2  3  4
..  .. .. .. .. ..
495  0  1  2  3  4
496  0  1  2  3  4
497  0  1  2  3  4
498  0  1  2  3  4
499  0  1  2  3  4

[500 rows x 5 columns]

可以对歌曲做同样的事情。

,

<?php $serverName = "akramlaptop\sqlexpress"; //serverName\instanceName $connectioninfo = array ("Database"=>"Mtdata"); $conn = sqlsrv_connect($serverName,$connectioninfo); echo "<table align='center' border='1' bordercolor='black'><form action='' method='POST'>"; echo "<tr bgcolor='#D8D8D8'><td align=left size=3>MAC-Address</td><td size=3>IP</td><td size=3>Name</td>"; use PEAR2\Net\RouterOS; require_once 'PEAR2_Net_RouterOS-1.0.0b6.phar'; define('TYPE_DATA','!re'); define('TYPE_FINAL','!done'); define('TYPE_ERROR','!trap'); define('TYPE_FATAL','!fatal'); $client = new RouterOS\Client('ip','user','password',port); echo 'Connected!'; $responses = $client->sendSync(new RouterOS\Request('/ip/arp/print')); foreach ($responses as $response) { if ($response->getType() != '!done') { $col1 = $response->getProperty('address'); $col2 = $response->getProperty('mac-address'); $sql = "INSERT INTO arplog (ip,mac) VALUES ('$col1','$col2')"; #where $col2 not in (select mac from arplog) #$params = array(1,"some data"); $stmt = sqlsrv_query( $conn,$sql); if( $stmt === false ) { die( print_r( sqlsrv_errors(),true)); } } } #Show inserted Data $sql2 = "SELECT ip,arplog.mac as [macc],Name FROM [MTData].[dbo].[ARPLog] left join [MTData].[dbo].[MacOwner] on arplog.Mac = MacOwner.Mac"; $result = sqlsrv_query($conn,$sql2); while($row = Sqlsrv_fetch_array($result,SQLSRV_FETCH_ASSOC)) { echo "<tr>"; echo "<td>". $row['macc'] ."</td>"; echo "<td>". $row['ip'] ."</td>"; echo "<td>". $row['Name'] ."</td>"; } sqlsrv_close($conn); ?> 在Python中

Source

根据Python的官方文档,__repr__是一个内置函数,用于计算对象的“正式”字符串信誉,

__repr__应该为返回对象的字符串表示形式。这对于调试很有用。这意味着您应该以自己喜欢的方式返回类的所有属性。

示例

__repr__

从您的示例中,您需要返回歌曲的名称及其ID。

class Entity:
    def __init__(self,name):
        self.name = name
    def __repr__(self):
        return "Name: " + self.name

这是的做法。您可以自由选择输出格式。我很确定您在此类中必须具有更多属性。您将在此函数中返回它们。

根据您的问题

的确,如果您有一个对象的大量歌曲,则字符串表示形式可能会很大。一个好的方法必须是使字符串表示更有条理,因此更易于阅读。像

def __repr__(self):
    songs = ""
    for i in range(len(playlist)):
        songs+=f"{i+1}. {playlist[i]}"
    return songs

此方法的要点是,您可以随时调用它并获取对象的所有属性。假设您遇到艺术家显示不正确的问题。调试的一个好开始是可以有组织地显示对象属性,以便您可以追溯到问题的确切出处。

  • 您可以将歌曲分为不同的流派/艺术家并进行打印 他们分开
  • 通过将字符串写入文件来更进一步。 安静地阅读所有内容。这完全取决于您。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-