8.2.1 创建自己的类
学习面向对象的第一步,就是创建一个类。因为类是面向对象的基石。Python类和其他编程语言的类差不多,也需要使用class关键字。下面通过一个实际的例子来看一下Python类是如何创建的。
[例 8.1] 本例会创建一个类,以及利用这个类创建两个对象,并调用其中的方法。
# 创建一个person类
class person:
# 定义setName方法
def setName(self,name):
self.name = name
# 定义getName方法
def getName(self):
return self.name
# 定义greet方法
def greet(self):
print("Hello I'm {name}.".format(name = self.name))
# 创建person1对象
person1 = person()
# 创建person2对象
person2 = person()
# 调用person1对象的setName方法
person1.setName('Bill Gates')
# 调用person2对象的name属性
person2.name = 'Bill Clinton'
# 调用person1对象的getName方法
print(person1.getName())
# 调用person1对象的greet方法
person1.greet()
# 调用person2对象的属性
print(person2.name)
# 调用person2对象的greet方法(另一种调用方法的方式)
person.greet(person2)
输出结果:
Bill Gates
Hello I'm Bill Gates.
Bill Clinton
Hello I'm Bill Clinton.
从上面的代码可以了解到Python类的如下知识点:
▩ Python类使用class关键字定义,类名直接跟在class关键字的后面
▩ 类也是一个代码块,所以类名后面要跟着一个冒号(:)
▩ 类中的方法其实就是函数,定义的方法也完全一样,只是由于函数定义在类的内部,所以为了区分,将定义在类内部的函数称为方法
▩ 每一个方法的第1个参数都是self,这是必需的。这个参数名不一定叫self(可以叫abc或任何其他名字),但任意一个方法必须至少指定一个self参数,如果方法中包含多个参数,第1个参数将作为self参数使用。在调用方法时,这个参数的值不需要自己传递,系统会将方法所属的对象传入这个参数。在方法内部可以利用这个参数调用对象本身的资源,如属性、方法等。
▩ 通过self参数添加的name变量是person类的属性,可以在外部访问。本例设置了person2对象的name属性值,与调用person1.setName方法的效果完全相同。
▩ 使用类创建对象的方式与调用函数的方式相同。在Python语言中,不需要想Java一样使用new关键字创建对象,只需要用类名加上构造方法参数值即可。
▩ 调用对象的方法有两种方式,一种是直接通过对象变量调用方法,另一种是通过类调用方法,并且将相应的对象传入方法的第1个参数。在本例中使用了person.greet(person2)的方式调用了person2对象中的greet方法
如果使用集成开发环境,如pydev、pycharm,那么代码编辑器也会对面向对象有很好的支持,例如,当在对象变量后面输入一个(.)后,IDE会列出该对象中所有可以调用的资源,包括方法和属性。