2011-04-14 61 views
1

我很难掌握类中某个方法的变量,我想知道是否有人能解释这些“工作”是如何帮助我更好地理解它的。Python中面向对象编程的基本问题

例如:

Time类

def __init__(self, hour,minute, second) 
    self.hour = hour 
    self.minute = minute 
    self.second = second 

def print_time(self): 
    print '%.2d:%.2d:%.2d' % (self.hour, self.minute, self.second) 

time = Time(h,m,s) 
time.print_time() 

内哪里发生在 '自我' 变量的变化?为什么不调用这个方法(看起来更直接):方法(var1(subject),var2,var3,var4)?而不是subject.method(var2,var3,var4)? (我知道我对此的理解充其量,所以请纠正我,如果我的任何条款也不正确)。

另一个例子也是非常有用的。谢谢。

+0

此错误代码是错误的。例如。 'self.x = hour' - 在可用范围内没有'hour'。什么是'print_time'?班级定义在哪里? – detly 2011-04-14 02:48:56

+0

好 - 我更新了代码。这个例子摘自“如何像计算机科学家一样思考”(下面的链接)。 – David542 2011-04-14 02:53:29

回答

4
  1. 魔法。准确地说,Python专用的魔术;其他语言可能(并且经常)选择以不同的方式进行。

  2. 它可以。在Python中,Class.method(obj)obj.method()相同,当objClass的实例时。尽管如此,__init__()是一个特例。

+2

我会说“魔法”发生在其他语言中,其中像“this”这样的词神奇地指向当前实例(有时“this”甚至魔术般地添加到它所适合的字段中)。 – 2011-04-14 03:01:03

0

你从哪里得到这个奇怪的代码?它没有任何意义。

您应该看看“How To Think Like a Computer Scientist”,它的代码示例与您发布的内容类似,只是它是正确的,并且它解释了变量范围。查看上述URL的第15.6节。

+0

它是从那里复制并粘贴的,我只是更改了__init__中的变量。唯一的是,我没有包含print_time()方法。 – David542 2011-04-14 02:43:05

+1

你不能只改变那样的变量。基本上,来自web的代码接受三个作为__init__函数参数的值,并将它们复制到对象实例的三个属性中。这取决于在等号右侧使用的参数名称。左侧名称可以是任何东西。 – 2011-04-14 02:46:14