当函数参数为对象时,在函数体内可以使用该对象的属性和方法。下面我们就来详细讲解一下如何使用。
1. 理解参数为对象
在Python中,一切皆对象。当我们将某个对象作为函数的参数传入时,实际上传入的是该对象的引用,也就是内存地址,而不是该对象本身的值。因此,在函数内部操作该参数时,实际上是在该对象的内存中进行操作,所以在函数内部修改该对象参数的值,也会影响函数外的该对象的值。
2. 使用对象参数的属性和方法
接下来我们看一下如何在函数中使用对象的属性和方法。以一个简单的例子,假设我们有一个名为Person的类,它有两个属性:name和age,有一个方法say_hello(),用于打招呼。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def say_hello(self):
print("Hello, my name is %s, and I'm %d years old" % (self.name, self.age))
现在我们来定义一个函数greet,它的参数是一个Person类型的对象。在函数中,我们可以通过该对象的属性和方法进行操作。下面是函数的代码实现:
def greet(person):
person.say_hello()
person.age += 1
print("It's nice to meet you, %s" % person.name)
我们定义了一个greet函数,它接受一个Person类型的参数person。在函数中,我们使用Person对象的say_hello()方法打招呼,并修改该对象的age属性加1。最后,打印出“It’s nice to meet you, + name”这句话。
下面我们来测试一下函数:
person1 = Person("Tom", 20)
greet(person1)
输出结果为:
Hello, my name is Tom, and I'm 20 years old
It's nice to meet you, Tom
可以看到,我们成功地使用了Person对象的say_hello()方法,同时对该对象的age属性进行了修改。
3. 更多例子
除了上面的例子,我们来看看更复杂一点的例子。
假设有一个学生类Student,它有两个属性:name、age和course,有一个方法study(),用于打印出该学生正在学习的课程名称。我们定义一个函数learn(),它接受一个Student对象作为参数,并调用它的study()方法。之后,我们重新给该学生的course属性赋值为“Computer Science”。
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
self.course = ""
def study(self):
print("I'm studying %s." % self.course)
def learn(student):
student.study()
student.course = "Computer Science"
s1 = Student("Alice", 19)
learn(s1)
print(s1.course)
输出结果为:
I'm studying .
Computer Science
我们调用了learn()函数,将s1作为参数传入。在函数内部,我们调用了其study()方法,输出结果为空。之后,我们将其course属性赋值为“Computer Science”。在函数外部,再次输出s1的course属性值,我们可以看到,其值已经被更改。
上面的例子展示了如何在函数中改变对象属性的值。由此可见,当函数参数为对象时,如果对该参数进行修改,那么原对象的值也会被修改。同时,在函数中可以访问该对象的属性和方法。