初级篇
-
面向过程:根据业务逻辑从上到下写垒代码
-
函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
-
面向对象:对函数进行分类和封装,让开发“更快更好更强...”
1、面向对象三大特性:封装、继承、多态。
-
封装:将内容封装到某处,从某处调用被封装的内容;
-
继承:子类可以继承父类的所有内容,分为单继承和多继承;
-
当类是经典类(不继承object)时,多继承情况下,会按照深度优先方式查找,即左边一条道走到黑,一直到共同的父类,再去右边找;
-
当类是新式类(默认继承object)时,多继承情况下,会按照广度优先方式查找,即左边到共同父类之前,再去右边找,直到共同父类;
-
-
多态:由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同。
2、创建类
- class ClassName()--创建类,类的命名规则为驼峰法,每个单词的首字母必须大写;小写的名称指根据类创建的实例(对象);
- Python2.7中创建类时,需要在括号内包含object,如class ClassName(object)
- 类中的函数称为方法,有关函数的一切都适用于方法,唯一的差别在于调用方法的方式;
- __init__()这是一个特殊的方法,称为构造方法,每当你根据类创建新的实例时,Python都会自动运行它;开头和末尾各有两个下划线,这是一种约定,旨在避免默认方法和普通方法发生名称冲突;
class Dog(): '''一次模拟小狗的简单尝试''' def __init__(self,name,age): '''初始化属性name和age''' self.name = name self.age = age def sit(self): '''模拟小狗被命令时蹲下''' print(self.name.title() + ' is now sitting.') def roll_over(self): '''模拟小狗被命令时打滚''' print(self.name.title() + ' rolled over.') my_dog = Dog('holiday',3) print("My dog's name is " + my_dog.name.title() + '.') print("My dog's age is " + str(my_dog.age) + '.') #用句点法来调用Dog类中定义的任何方法 my_dog.sit() my_dog.roll_over()
3、类中的每个属性都要有初始值,哪怕这个值是0或空字符,在有些情况下,可以设置默认值,在__init__()内指定初始值,如果你对某个属性这么做了,就无需包含为它提供初始值的形参。
- 三种方法修改属性值:1、直接修改;2、通过方法修改;3、通过增量修改
#创建一个餐馆类,并修改属性值 class Restaurant(): def __init__(self,restaurant_name,cuisine_type): self.restaurant_name = restaurant_name self.cuisine_type = cuisine_type self.number_served = 0 #设置属性默认值 def describe_restaurant(self): print("The name of restaurant is %s."%self.restaurant_name) print("The cuisine type of restaurant is %s."%self.cuisine_type) print("[%s] people have dined in this restaurant."%self.number_served) def set_number_served(self,number): # 2通过方法修改属性值 self.number_served = number def increment_number_served(self,increment_num): #3通过增量修改属性值 self.number_served += increment_num '''这个增量就是餐馆每天的就餐人数''' print('I think the restaurant serves %s people a day.'%increment_num) def open(self): print("The restaurant is open!") restaurant = Restaurant('KFC','fast food') restaurant.number_served = 10 #1直接修改属性值 restaurant.describe_restaurant() restaurant.set_number_served(200) restaurant.describe_restaurant() restaurant.increment_number_served(300) restaurant.describe_restaurant()