面向对象编程(OOP)是一种程序设计思想。
创建类
下面我们创建一个类:
class Student():
"""一个学生基本信息的类"""
def __init__(self, name, age):
self.name = name
self.age = age
self.school = 'BIT'
def print_info (self):
print ("嗨!我是" + self.name + "。")
print ("我" + str(self.age) + "岁。")
print ("我在" + self.school + "读书。")
def get_school (self):
return self.school
def set_school (self, school):
self.school = school
第一行,首先是关键字class
,它表示我们要创建一个类;接下来是类名,这里是Student
,类名一般首字母大写,最后是小括号()
和冒号:
。这样,我们就创建了一个名为Student
的类。
"""一个学生基本信息的类"""
是这个类的描述信息。
接下来我们在类中定义了四个方法(函数),分别是:__init()
、print_info()
、get_school()
和set_school()
。
__init()__()
是一个特殊的方法,python在实例化(创建类的对象)该类时,会自动运行该方法。
__init()__()
方法有三个形参,分别是self
、name
和age
。如果观察本类的其他方法,就会发现每一个方法都有self
参数,这个参数指向实例(对象)本身的引用,让实例能够访问类中的属性和方法。在调用方法时,self
参数会自动传递,不需要写明。
__init()__()
方法中定义了三个变量,以self
为前缀的变量可以供类中所有方法和实例使用。self.name
表示实例中的name
变量。变量self.name
和self.age
由参数传递获得,变量self.school
被指定了默认值'BIT'
。实例的变量也叫作属性。
类中的第二个方法print_info()
打印学生的基本信息。它接受一个由Python自动传递的参数self
。在其函数体内调用自身属性时使用self.属性名
的格式。
类中的第三个方法get_school()
返回属性self.school
的值,第四个方法set_school()
接收一个字符串,并将其作为属性self.school
的值。
创建实例
创建实例非常简单:
lihua = Student ('李华', 22)
这条语句按照Student
类创建了一个lihua
实例,创建时传入的参数是'李华'
和22
。Python在创建实例时自动调用了类中的__init()__
函数,因此实例的name
属性被赋值为'李华'
,age
属性被赋值为22
。
调用实例的属性也很简单:
print ("嗨!我是" + lihua.name + "。")
这条语句调用了实例lihua
中的属性name
,输出的结果如下:
嗨!我是李华。
由于类中已经定义了输出基本信息的方法,我们可以直接调用:
lihua.print_info()
这样,我们就调用了实例lihua
的方法print_info()
。它的输出如下:
嗨!我是李华。
我22岁。
我在BIT读书。
可以创建多个实例:
lihua = Student ('李华', 22)
lihua.print_info()
wang5 = Student ('王五', 23)
wang5.print_info()
这里创建了两个实例,分别是lihua
和wang5
,输出如下:
嗨!我是李华。
我22岁。
我在BIT读书。
嗨!我是王五。
我23岁。
我在BIT读书。
修改属性的值
前面我们已经调用过了实例的属性,比如要调用实例lihua
的属性name
,可以使用lihua.name
调用,可以用相同的方法修改实例属性的值:
wang5 = Student ('王五', 23)
wang5.school = ('北京大学') # 修改属性的值
wang5.print_info()
例子中第二条语句修改了属性的值,采用的是直接赋值的方法,例子的输出如下:
嗨!我是王五。
我23岁。
我在北京大学读书。
也可以使用类中已经定义的方法修改属性的值:
wang5 = Student ('王五', 23)
wang5.set_school('清华大学') # 修改属性的值
wang5.print_info()
例子中第二条语句使用了实例中的方法set_school()
对属性school
值进行了更新,例子的运行结果如下:
嗨!我是王五。
我23岁。
我在清华大学读书。
网友评论