首页 文章

Python静态方法

提问于
浏览
0

面向对象的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 回答

  • 0

    你快到了 .

    您只需传递整个对象,而不是将 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 是"magic"变量 .

    但您应该考虑重命名参数 .

    顺便说一句,你在 static_method 中有一个拼写错误,一旦你调用变量 hour_to_seconds 然后访问 hours_to_seconds - 你需要决定一个 .

  • 1

    静态方法显然是一个与类而不是实例相关联的函数 . Python中的 self 表示Python中的类的实例 .

    这些不是simpatico .

    您可以通过将 duration1 传递给静态方法并将其接受参数的名称从 self 更改为 duration 或类似名称来使代码工作 .

相关问题