面对对象编程
面向对象编程是最有效的软件编写方法之一。在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。
类(Class)
用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
对象
python中一切皆对象
三个特征
身份:唯一的身份标识,可以使用内建函数id()来得到,这个值可以被认为是该对象的内存地址
类型:对象的类型决定了该对象可以保存什么类型的值,可以使用内建函数type()
值:对象表示的数据项
方法
类中的函数称为方法,所有类都有一个名为__init__()的函数,它始终在启动类时执行使用__init__()函数将值赋给对象属性,或创建对象时需要执行的其他操作
self参数
self参数是对类的当前实例的引用,用于访问属于该类的变量。不必命名为self,可以随意调用,但必须是类中任意函数的首位参数!
格式
class类名():
def __init__(self): #构造器,格式规定
pass #代码块
创建类
例子:首先创建一个简单的类,dog类(在python中,首字母大写的是类)。它表示的不是特定的类,而是任何小狗。宠物狗一般都有名字和年龄(属性),其次都会蹲下和打滚(行为)
1 classDog():2 def __init__(self,name,age):3 self.name =name4 self.age =age5
6 def sit(self): #蹲下7 print(self.name.title() + 'is now stting.')8
9 def roll_over(self): #打滚10 print(self.name.title() + 'rolled over!')
第1行:定义一个类,类名为Dog
第2行:定义__init__()方法,包含三个形参:self、name、age,__init__() 是一个特殊的方法,每当你根据Dog类创建新实例时,Python都会自动运行它。在这个方法的定义中,形参self 必不可少,还必须位于其他形参的前面。因为它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
第3、4行:定义的两个变量都有前缀self 。以self 为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量。self.name = name 获取存储在形参name中的值,并将其存储到变量name中, 然后该变量被关联到当前创建的实例。像这样可通过实例访问的变量称为属性 。
第6-10行:定义了两个方法:sit()和roll_over(),由于蹲下和打滚并不需要名字和年龄,所以只有一个self参数。并打印两句话,这个地方可以继续扩展小狗的行为。
访问属性
1 classDog():2 def __init__(self,name,age):3 self.name =name4 self.age =age5
6 def sit(self):7 print(self.name.title() + 'is now stting.')8
9 def roll_over(self):10 print(self.name.title() + 'rolled over!')11
12 my_dog = Dog('wille',6)13 my_dog.sit()14 my_dog.roll_over()15
16 输出17 Wille isnow stting.18 Wille rolled over!
第12行:创建一条名为wille,6岁的小狗,python调用Dog类中的__init__()方法,并使用我们提供的值设定name和age的属性。
第13、14行:在Dog类中查找sit()和roll_over()方法,并将我们提供的值代入。
创建多个实例
classDog():
def __init__(self,name,age):
self.name=name
self.age=age
def sit(self):
print(self.name.title()+ 'is now stting.')
def roll_over(self):
print(self.name.title()+ 'rolled over!')
my_dog= Dog('wille',6)
your_dog= Dog('lucy',4)
print("My dog's name is" + my_dog.name.title() + '.')
print("My dog is" + str(my_dog.age) + 'years old.')
my_dog.sit()
print("Your dog's name is" + your_dog.name.title() + '.')
print("Your dog is" + str(your_dog.age) + 'years old.')
your_dog.sit()
输出
My dog's name is Wille.
My dog is 6years old.
Willeisnow stting.
Your dog's name is Lucy.
Your dog is 4years old.
Lucyis now stting.