面向对象的python,我想创建一个静态方法,将小时,分钟和秒转换为秒 .
我创建了一个名为Duration的类:
class Duration:
def __init__(self, hours, minutes, seconds):
self.hours = hours
self.minutes = minutes
self.seconds = seconds
然后我创建一个名为duration1的变量,我在其中给出数字
duration1 = Duration(29, 7, 10)
我有一个名为info的方法,它检查是否有任何数字小于10,如果是这样,在它前面添加一个“0”,然后我将值恢复为整数 .
def info(self):
if self.hours < 10:
self.hours = "0" + str(self.hours)
elif self.minutes < 10:
self.minutes = "0" + str(self.minutes)
elif self.seconds < 10:
self.seconds = "0" + str(self.seconds)
info_string = str(self.hours) + "-" + str(self.minutes) + "-" + str(self.seconds)
self.hours = int(self.hours)
self.minutes = int(self.minutes)
self.seconds = int(self.seconds)
return info_string
现在我想创建一个static_method来将这些值转换为秒,并返回值,以便我可以用duration1调用它(至少我认为我应该怎么做...?
@staticmethod
def static_method(self):
hour_to_seconds = self.hours * 3600
minutes_to_seconds = self.minutes * 60
converted_to_seconds = hours_to_seconds + minutes_to_seconds \
+ self.seconds
return converted_to_seconds
duration1.static_method(duration1.info())
我想我的问题是如何使用此代码的静态方法来更改数字?我还应该告诉你这是一个学校作业,所以我必须使用静态方法来解决问题 . 任何帮助是极大的赞赏!
错误消息说明:
hour_to_seconds = self.hours * 3600
AttributeError:'str'对象没有属性'hours'
2 回答
你快到了 .
您只需传递整个对象,而不是将
duration1.info()
的结果传递给duration1.static_method()
:因为它是一个静态方法,你也可以从类而不是实例中调用它(这就是为什么人们想要一个静态方法 - 你不必创建一个实例):
顺便说一句,如果你只是一个约定,那么
self
不应该被用作参数名称 . 这并不是self
是"magic"变量 .但您应该考虑重命名参数 .
顺便说一句,你在
static_method
中有一个拼写错误,一旦你调用变量hour_to_seconds
然后访问hours_to_seconds
- 你需要决定一个 .静态方法显然是一个与类而不是实例相关联的函数 . Python中的
self
表示Python中的类的实例 .这些不是simpatico .
您可以通过将
duration1
传递给静态方法并将其接受参数的名称从self
更改为duration
或类似名称来使代码工作 .