2016-12-30 35 views
-4

我开始在Python中学习class,并试图让我的头在的attributes,methodsparameters的概念。Python - 类的属性,方法和参数

我与3个例子的工作:


example 1

class Clock(object): 
     def __init__(self, time): 
     self.time = time 
     def print_time(self): 
     time = '6:30' 
     print self.time 

有:

clock = Clock('5:30') 
clock.print_time() 

它打印5:30


example 2

class Clock(object): 
    def __init__(self, time): 
    self.time = time 
    def print_time(self, time): 
    print time 

有:

clock = Clock('5:30') 
clock.print_time('10:30') 

它打印10:30


example 3

class Clock(object): 
     def __init__(self, time): 
     self.time = time 
     def print_time(self): 
     print self.time 

最后,用:

boston_clock = Clock('5:30') 
paris_clock = boston_clock 
paris_clock.time = '10:30' 
boston_clock.print_time() 

它打印10:30

可以请人解释我是如何的属性,方法和参数被绑定到对象这些例子?

+1

我投票结束这个问题作为题外话,因为这不是一个辅导服务。 – TigerhawkT3

+0

谢谢你的帮助 –

+2

你的问题相当模糊。属性,方法和参数是非常普遍的概念。我认为你需要缩小你需要了解的范围。现在,你甚至不清楚你知道什么属性,方法和参数。这样做可能是很好的做法:“我认为blah是一个参数,并且被绑定到代码行中的某个对象,是正确的吗?”这样人们可以看到你对这些概念的现有理解是什么。 – BrenBarn

回答

-1

此链接here可以解释更多关于类属性/方法/参数。

但是,我明白这些概念有多复杂,所以我会回答你的问题(尽管将来会尝试提出更具体的问题!)。

在示例之一:

init(初始化)和print_time都是类属性。当您初始化clock变量并通过参数'5:30'时,它将访问init函数并且击中self.time = time一行代码。由于使用点符号访问时间,因此time是INSTANCE属性(特定于个别对象)。

当您调用self.print_time()时,time存在特定于该函数调用的局部变量,因此实例属性不会更改。这就是为什么当你打印self.time它仍然是5:30。

在例如两个:

在这种情况下,initprint_time功能都是类属性(类似于上面的例子)。 clock对象的初始化与上面的相同。但是,当它调用print_time时,time是参数'10:30',因此当我们只打印time(注意我们没有使用任何点符号)时,它仅打印'10:30'的局部变量。

在例如三个:

initprint_time都是类属性,与上述相同的两个例子。初始化boston_clock对象时,它与示例1和2相似。然后,将名称paris_clock分配给对象boston_block(请注意paris_clockboston_clock只是指向同一对象的名称,比如我可以有两个名称)。因此,当我们执行代码行paris_clock.time = '10:30'时,此单个对象的INSTANCE属性将更改为'10:30'。但是,由于boston_clock指向与paris_clock相同的对象,因此boston_clocktime属性也是“10:30”。

-1

属性是类或实例中的变量。在这种情况下,变量hello是类Hi的一个属性。

class Hi: 
    hello = "Hello World!" 

方法是在类中的功能,所以对于这样的事情,功能greet是类Hi的方法。

class Hi: 
    def greet(self): 
    pass 

参数是进入方法的输入。所以字符串"Hello World!"是类Hi中方法say的参数。

class Hi: 
    def say(self, saying): 
    print(saying) 

Hi().say("Hello World!") 

软件工程StackExchange网站上有关于OOPL的一个很好的问题。 Explaining OOP Concepts to a non technical person.

+1

_“可以请别人解释这些示例中属性,方法和参数如何绑定到对象?” - 我真的不认为你回答了这个问题。看起来更像是你在丛林中对我的殴打。没有冒犯的意思。 –

+0

@leaf有道理,我只是试图解释每个标准程序如何工作。这篇文章末尾的问题可能会更好地解释这些概念。 –

+0

是的,我可以看到你来自哪里。然而,OP看起来很困惑,并且可以从一个很好的解释中受益。唉,我找不到适合他的问题的答案。 mabye我会发布我自己的。 –