当我在Codecademy上学习
Python时,我遇到了这个问题,代码如下:
class Employee(object):
def __init__(self, name):
self.name = name
def greet(self, other):
print “Hello, %s” % other.name
class CEO(Employee):
def greet(self, other):
print “Get back to work, %s!” % other.name
ceo = CEO(“Emily”)
emp = Employee(“Steve”)
emp.greet(ceo)
ceo.greet(emp)
我想知道other.name在这里意味着什么?
self.name = name可以解释为实例对象的成员变量self.name被设置为等于name,所以我们可以说self是一个实例,name是它的属性,对吧?
并且,不是由ceo = CEO(“Emily”)分配给参数的“Emily”和由emp = Employee(“Steve”)分配给名称的“Steve”?它怎么可能这样使用?
最佳答案 类属性
other.name是任何类实例的name属性,它作为参数传递给greet()方法的另一个参数.
扩展示例
class Employee(object):
def __init__(self, name):
self.name = name
def greet(self, other):
print “Hello, %s” % other.name
class CEO(Employee):
def greet(self, other):
print “Get back to work, %s!” % other.name
ceo = CEO(“Emily”)
emp = Employee(“Steve”)
print emp.name, ‘greets’, ceo.name
emp.greet(ceo)
print ceo.name, ‘greets’, emp.name
ceo.greet(emp)
Steve greets Emily
Hello, Emily
Emily greets Steve
Get back to work, Steve!
进一步继承说明(编辑)
CEO继承了Employee定义的所有东西(比如name属性),但可以改变一些东西(比如改变greet()方法).
这是正在发生的事情:
>当该类的实例创建为ceo时,“Emily”将分配给CEO类的name属性.†
ceo = CEO(“Emily”)
>当将该类的实例创建为emp时,将“Steve”分配给Employee类的name属性.†
emp = Employee(“Steve”)
>在实例的greet()调用中,整个其他类实例通过该方法的其他参数传递给它.
emp.greet(ceo)
这将所有ceo传递给emp.greet(),以便emp.greet()可以从ceo访问某些内容,在本例中是ceo的名称.
>对ceo实例重复greet()调用
ceo.greets(emp)
†:这就是__init __()方法的用途. __init __()可以接受任何参数,分配任何内容或运行任何代码.只要创建了类的实例,就会调用它.