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)
我是python的新手,我最近一直在做一些练习。我遇到了一个问题,我已经写了同样的代码。但是我反复得到一个错误:" add_time未定义"。我尝试定义一个main()方法但是它没有打印任何东西。请帮助。
答案 0 :(得分:3)
您尚未为上述类创建对象。
类中的任何函数/方法只能由该类的对象访问。有关面向对象编程基础知识的更多信息,请查看this页面。
同时要使其工作,请按以下方式定义您的课程:
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)
在类块之外,写下以下几行:
TimeObject = Time()
start=Time(9,45,00)
running=Time(1,35,00)
TimeObject.add_time(start,running)
print "done"
但是我建议你在类之外编写add_time函数,因为你将对象作为同一类中函数的参数传递给类,并且它被认为是面向对象编程中的错误设计。 希望能帮助到你。干杯!
答案 1 :(得分:1)
只要你在构造函数
中指定了3个args,这对我来说就可以了def int_to_time(seconds):
time=Time(0,0,0) # just set your 3 positionals args here
minutes,time.second=divmod(seconds,60)
time.hour,time.minute=divmod(minutes,60)
return time
避免它的另一种方法可能是:
class Time:
def __init__(self,x=0,y=0,z=0):
self.hour=x
self.minute=y
self.second=z
如果您要将功能添加到您的课程中(例如time_to_int
,int_to_time
甚至add_time
),那么您需要缩进一个级别的4个空格并添加self
到您的方法参数
答案 2 :(得分:1)
Hii Mathers25,
我解决了你的问题,试试下面的代码来获得最佳输出,
App ID Ref Id App Type Reg Date
1 1 Main 2017-05-13
2 2 Sub 2017-05-14
3 1 Sub 2017-05-16
4 2 Main 2017-05-15
5 3 Main 2017-05-14
6 1 sub 2017-05-17
7 null Main 2017-05-20
答案 3 :(得分:-1)
适合我:
class C:
def f(a, b):
return a + b
x = f(1,2)
print(C.x)
但你不应该这样做。当类是“创建”时,类级别的代码正在执行,通常你需要静态方法或类方法(用@staticmethod
或@classmethod
修饰)并在某个函数/实例化类中执行代码。如果这是简单的脚本,您也可以在顶层(模块)级别执行它。你的代码片段是“不好的做法”:类级别(我说的是缩进)是用于声明,而不是用于执行某些操作。在类级别上执行与C宏类似的代码是正常的:例如,调用decorator,转换一些方法/属性/ etc - 静态的“纯”函数!