class Animal(object):
"""Makes cute animals."""
is_alive = True
health = 'good'
def __init__(self, name, age):
self.name = name
self.age = age
# Add your method here!
def description(self):
print self.name
print self.age
hippo = Animal('Tom', '20')
sloth = Animal('Randy', '18')
ocelot = Animal('Birdman','57')
hippo.description()
print ocelot.health
print hippo.health
print sloth.health
上面的代码来自codecademy的python课程。我对围绕OOP的一些定义感到困惑。如果我的理解是正确的,那么在类中定义的函数被称为方法,这就是为什么当它被调用时,例如像:hippo.description()','()'是必要的,因为语法涉及功能
然而,我开始对'self.name'和'self.age'感到困惑。这些也是方法吗?我想知道它们是否可能是成员变量,但是它们不会以变量“健康”在上面的相同方式定义吗?如果它们不是成员变量,为什么可以使用点表示法以与成员变量相同的方式访问它们?
干杯
答案 0 :(得分:0)
我假设您来自更传统的OOP编程语言,如C ++或Java。
health
类中的 Animal
是您将其称为静态成员变量的内容,但在Python中,这称为类属性,因为它对于类是唯一的。
name
类中的 Animal
是您要引用的成员或实例变量,而在Python中,它被称为实例属性,因为它对于每个类的实例都是唯一的。 / p>
您使用self
来引用其自己类中的属性。
答案 1 :(得分:0)
首先,类和实例属性之间的区别在其他地方得到解答。
方法和成员变量之间的区别在于,虽然它们都是属性,但方法是函数,而成员变量不是(或不必是)。方法通常也是一个类属性(至少如果你使用新的样式类)。
然而,在python函数中是第一类对象,所以这可能会混淆一点:用一个函数分配一个成员变量是完全有效的(反之亦然),但是那会变得有些不同,因为通常一个方法是共享的所有对象,但在分配给实例时,它变为对该实例的私有。
self.foo
可用于访问实例属性或类属性(如果实例属性不存在)。