python - 如何根据 Google Sheets API 正确打印对象列表属性?
问题描述
我是 Python 新手,不熟悉使用列表而不是数组。我正在尝试专门打印包含在相同类型对象列表中的对象的一个属性。
我正在阅读str和repr之间的一些差异,因为str没有打印我想要的内容。我读到两者都应该定义,即使它们完全相同。当我现在输出时,我得到以下信息:
<bound method MacAuth.__str__ of XXXXXXXXXXXX>
<bound method MacAuth.__str__ of XXXXXXXXXXXX>
<bound method MacAuth.__str__ of XXXXXXXXXXXX>
XXXXXXXXXX 实际上显示了正确的属性,并且正是我想看到的。我不需要输出线的其余部分。
此外,此信息是从 Google Sheets API 作为 cell.value() 读取的,所以我不确定这是否会导致问题。
class MacAuth():
def __init__(self, mac_address):
self.mac_address = mac_address
self.registerd_user = 'registerd_user'
def __str__(self):
return self.mac_address
def __repr__(self):
return self.mac_address
mac_list = list()
for i in range(start, end):
mac = sheet.cell(i,2).value
mac_list.append(MacAuth(mac))
for i in range(0,3):
print(mac_list[i].__str__, sep='\n')
解决方案
查看. _ _ str()
相关部分:
str(object)
returnobject.__str__()
,这是对象的“非正式”或可很好打印的字符串表示形式。对于字符串对象,这是字符串本身。如果 object 没有__str__()
方法,则str()
回退到返回repr(object)
。
同样,repr()
调用__repr__()
.
从上的文档print()
:
所有非关键字参数都像 dos 一样转换为字符串
str()
并写入流
所以print(obj)
行为类似于str(obj)
,除了它写入流而不是返回值。这意味着您的解决方案最终比您想象的要简单:
# you can iterate over the list directly
for mac_auth in mac_list:
# sep='\n' is the default value, so you don't need to specify it
print(mac_auth)
作为旁注,您目前看到此内容的原因是:
<bound method MacAuth.__str__ of XXXXXXXXXXXX>
是因为该方法MacAuth.__str__
也是一个对象,定义了自己的字符串表示,print
并将该方法转换为字符串。
绑定方法的表示包括对它们绑定到的对象的引用,在本例中为MacAuth
对象。流程将与此类似:
print()
尝试将__str__
绑定到对象的方法(它本身就是一个对象)MacAuth
转换为字符串__str__
的字符串表示形式包括它所绑定的对象,例如<bound method MacAuth.__str__ of [MacAuth obj]>
- 要打印该
[MacAuth obj]
部分,__str__
调用该对象,它会根据需要返回mac_address
属性
推荐阅读
- android - 运行模拟器时出错:没有足够的磁盘空间来运行 AVD
- java - 我可以使用 KeyListener 更改变量吗?
- python-3.x - 尽管安装了帮助程序,但导入帮助程序库时出错
- javascript - 数组不是函数(评估 'this.props.onPress(e)')
- string - 如何计算 Bash 中字符串中字符的出现次数
- sql - How to INSERT correctly in a VARRAY of TYPE OBJECT?
- blockchain - 如何解决solidity Remix中的类型错误
- amazon-web-services - AWS ASG 生命周期通知目标
- c# - 如何路由 401 和 403 错误?
- c++ - 您将如何嵌套结构?