Python - 类属性,方法和参数

时间:2016-12-30 02:43:34

标签: python class oop

我开始在python中学习class,并试图了解attributesmethodsparametersOOP的概念

我正在使用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

with:

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

可以请某人解释一下这些示例中的属性,方法和参数是如何绑定到对象的?

2 个答案:

答案 0 :(得分:1)

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

class Hi:
  hello = "Hello World!"

方法是类中的函数,因此对于类似的函数,函数greet是类Hi的方法。

class Hi:
  def greet(self):
    pass

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

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

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

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

答案 1 :(得分:1)

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

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

在示例一中:

init(初始值设定项)和print_time都是类属性。初始化clock变量并传入参数'5:30'时,它会访问init函数并点击self.time = 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对象时,它类似于示例一和二。然后将名称paris_clock分配给对象boston_block(请注意paris_clockboston_clock只是指向同一对象的名称,就像我可以拥有两个名称一样。因此,当我们执行代码行paris_clock.time = '10:30'时,此单个对象的INSTANCE属性将更改为“10:30”。但是,由于boston_clock指向与paris_clock相同的对象,boston_clock的{​​{1}}属性也是'10​​:30'。