在Python中使用类中的参数

当我在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
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)

我希望这很明确,read about and play有一些other examples的课程.

†:这就是__init __()方法的用途. __init __()可以接受任何参数,分配任何内容或运行任何代码.只要创建了类的实例,就会调用它.

点赞