面向对象的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
属性错误:&#39; str&#39;对象没有属性&#39;小时&#39;
答案 0 :(得分:1)
你快到了。
不是将duration1.info()
的结果传递给duration1.static_method()
,而是简单地传递整个对象:
duration1 = Duration(29, 7, 10)
print(duration1.info()) # 29-07-10
print(duration1.static_method(duration1)) # 104830
由于它是一个静态方法,你也可以从类而不是实例中调用它(这就是为什么人们想要一个静态方法 - 你不必创建一个实例):
print(Duration.static_method(duration1))
顺便说一句,如果您在静态方法中使用它,则不应将约定self
用作参数名称,但无论如何它都适用,因为 - 正如我所说 - 它只是一个约定。这并不是self
是一个“魔法”变量。
但你应该考虑重命名参数。
顺便说一下,static_method
中有一个拼写错误,一旦你调用变量hour_to_seconds
但是然后访问hours_to_seconds
- 你需要决定一个。
答案 1 :(得分:0)
静态方法显式一个绑定到类而不是实例的函数。 Python中的self
表示Python中的类的实例。
这些不是simpatico。
您可以通过将duration1
传递给静态方法并将其接受参数的名称从self
更改为duration
或类似名称来使代码生效。