【发布时间】:2022-01-03 14:16:51
【问题描述】:
我想知道如何打印特定索引的类内容。我创建了一个类,它包含某个地震运动的所有值,并将每个值存储在自己的数据类型中。
这是课程:
import re
class Txt_data:
def __init__(self, result):
self.date = result[0]
self.time = result[1]
self.latit = result[2]
self.long = result[3]
self.depth = result[4]
self.md = result[5]
self.ml = result[6]
self.mw = result[7]
self.region = result[8]
self.method = result[9]
def date(self):
return self._date
def time(self):
return self._time
def latit(self):
return self._latit
def long(self):
return self._long
def depth(self):
return self._depth
def md(self):
return self._md
def ml(self):
return self._ml
def mw(self):
return self._mw
def region(self):
return self._region
def method(self):
return self._method
# This does not work
def __str__(self):
return ('MAG: ' + float(self.ml()) + ' DEPTH: ' + int(self.region()) + ' DATE/TIME: ' + str(self.date()) + ' ' + str(self.time()) + ' LAT: ' + float(self.latit()) + ' LON: ' + float(self.long()))
result = [('2021.12.02', '22:29:24', '36.9605', '28.1775', '13.0', '-.-', '1.5', '-.-', 'KARACA-MARMARIS (MUGLA)', ' Quick')]
print(Txt_data(result))
我尝试使用 str 方法打印数据,但它不起作用。
这是错误:
Traceback (most recent call last):
File "/Users/seyfalsultanov/Documents/uni comp 100/comp100-2021f-ps5-seyfalku/main.py", line 73, in <module>
print(Txt_data(result))
File "/Users/seyfalsultanov/Documents/uni comp 100/comp100-2021f-ps5-seyfalku/main.py", line 60, in __str__
print('MAG: ' + float(self.ml()) + ' DEPTH: ' + int(self.region()) + ' DATE/TIME: ' + str(self.date()) + ' ' + str(self.time()) + ' LAT: ' + float(self.latit()) + ' LON: ' + float(self.long()))
AttributeError: Txt_data instance has no __call__ method
我的问题是如何打印我尝试在课堂上使用 str 方法打印的字符串。 非常感谢。
【问题讨论】:
-
您的实例属性正在隐藏同名的方法。例如,
self.latit是任何result[2],而不是可调用方法。 -
这些方法都不需要存在。只需直接访问实例属性,如果您找到引入 getter 的理由,您可以将实例属性替换为属性,而不会破坏类的公共接口。
-
无论如何,发布的代码都不会产生该错误。我在
self.time = result[1]线上收到IndexError。将Txt_data(result)替换为Txt_data(result[0])会得到预期的TypeError: 'str' object is not callable。
标签: python string class printing return