在类 Python 中调用方法

mat*_*s25 8 python methods class

class Time:

    def __init__(self,x,y,z):
        self.hour=x
        self.minute=y
        self.second=z

    def __str__(self):
        return "({:02d}:{:02d}:{:02d})".format(self.hour, self.minute, self.second)

    def time_to_int(time):
        minutes=time.hour*60+time.minute
        seconds=minutes*60+time.second
        return seconds

    def int_to_time(seconds):
        time=Time()
        minutes,time.second=divmod(seconds,60)
        time.hour,time.minute=divmod(minutes,60)
        return time

    def add_time(t1,t2):
        seconds=time_to_int(t1)+time_to_int(t2)
        return int_to_time(seconds)

start=Time(9,45,00)
running=Time(1,35,00)
done=add_time(start,running)
print(done)
Run Code Online (Sandbox Code Playgroud)

我是 python 的新手,最近我一直在做一些练习。我遇到了一个问题,我已经编写了相同的代码。但我反复收到错误:“add_time 未定义”。我尝试定义一个 main() 方法,但它没有打印任何内容。请帮忙。

cra*_*ses 6

您尚未为上述类创建对象。

类中的任何函数/方法只能由该类的对象访问。有关面向对象编程基础的更多信息,请查看页面。

同时,要使其正常工作,请按以下方式定义您的类:

class Time:

def __init__(self,x=None,y=None,z=None):
    self.hour=x
    self.minute=y
    self.second=z

def __str__(self):
    return "({:02d}:{:02d}:{:02d})".format(self.hour, self.minute, self.second)

def time_to_int(time):
    minutes=time.hour*60+time.minute
    seconds=minutes*60+time.second
    return seconds

def int_to_time(seconds):
    time=Time()
    minutes,time.second=divmod(seconds,60)
    time.hour,time.minute=divmod(minutes,60)
    return time

def add_time(t1,t2):
    seconds=time_to_int(t1)+time_to_int(t2)
    return int_to_time(seconds)
Run Code Online (Sandbox Code Playgroud)

在 class 块之外,写下以下几行:

TimeObject = Time()
start=Time(9,45,00)
running=Time(1,35,00)
TimeObject.add_time(start,running)
print "done"
Run Code Online (Sandbox Code Playgroud)

但是,我建议您在类外编写 add_time 函数,因为您将对象作为参数传递给类中的同一个类中的函数,这在面向对象编程中被认为是一种糟糕的设计。希望能帮助到你。干杯!

  • 谢谢@crazyglasses。我会赞成你的回答,但我的声誉低于 15。 (2认同)