文章目录
1.面向对象的定义1.1 定义类、属性和方法1.2 如何将类转化为对象(实例化)1.3 构造方法 2.面向对象的封装2.1 封装的定义2.2 封装的练习1.体重与跑步2.栈的功能封装练习:房子面积与家具 3.面向对象的继承3.1 继承的子类与父类3.2 多继承 4. 私有属性和私有方法5.面向对象的多态1.面向对象的定义
oop = object oriented programming(面向对象程序设计)
1.1 定义类、属性和方法
class 类(): pass
类:是一群具有相同特征或行为的事物的统称,类是抽象的,不能直接
使用
类:属性(信息)和方法(能完成的事情)
1.2 如何将类转化为对象(实例化)
对象:由类创造出来的具体存在
实例化指在面向对象编程中,使用类创建对象的过程称为实例化,是将一个抽象的概念具体化的过程
实例化过程中一般由类名 对象名 = 类名(参数1,参数2,…)
示例:
class people():name = 'leo'age = 20def eat(self):print('leo eats apple ')def walk(self):print('leo goes for a walk')p1 = people()print(p1.name)p1.eat()
1.3 构造方法
class People():def __init__(self):print('self',self)p1 = People()print('p1',p1)
2.面向对象的封装
面向对象的封装,通过定义模板提高代码的复用性。
2.1 封装的定义
class People():def __init__(self,name,age):self.name = nameself.age = agedef __str__(self):return 'I am %s' %self.namedef run(self):print('%s is running' %self.name)p1 = People('leo',20)print('p1:',p1.name)p1.run()print(p1)p2 = People('coco','18')print('p2:',p2.name)p2.run()print(p2)
2.2 封装的练习
1.体重与跑步
1.小明和小美都爱跑步
2.小美体重45.0公斤
3.小明体重75.0公斤
4.每次跑步都会减少0.5公斤
5.每次吃东西都会增加1公斤
class People():def __init__(self,name,weight):self.name = nameself.weight = weightdef __str__(self):return 'My name is %s and weight is %.2f' %(self.name,self.weight)def run(self):print('%s is running.' %self.name)self.weight -= 0.5def eat(self):print('%s is eating.' %self.name)self.weight += 1xiaoming = People('xiaoming',75.0)xiaoming.run()print(xiaoming)xiaomei = People('xiaomei',45.0)xiaomei.eat()print(xiaomei)
2.栈的功能封装
class Stack(object):def __init__(self):self.stack = []def __len__(self):return len(self.stack)def top(self):if not self.is_empty():return self.stack[-1]raise Exception('Stack is empty')def push(self,element):self.stack.append(element)def pop(self):if self.is_empty():raise Exception('Stack is empty')else:item = self.stack.pop()return itemdef length(self):return len(self.stack)def is_empty(self):return len(self.stack) == 0stack = Stack()stack.push(100)stack.push(200)print(stack.length())item = stack.pop()print('The pop item is :%s' %item)print('The top item is:',stack.top())print(stack.length())print(stack.is_empty())
练习:房子面积与家具
class Furniture(object):def __init__(self,name,area):self.name = nameself.area = areadef __str__(self):return ('[%s]占地%.2f平米' %(self.name,self.area))class House(object):def __init__(self,type,area):self.type = typeself.area = areaself.free_area = areaself.fur_list = []def __str__(self):return ('户型:%s\n总面积:%.2f\n剩余面积:%.2f\n家具名称列表:%s'%(self.type,self.area,self.free_area,self.fur_list))def add_fur(self,item):self.fur_list.append(item.name)self.free_area -= item.areabed = Furniture('bed',4)wardrobe = Furniture('wardrobe',2)table = Furniture('table',1.5)house = House('villa',200)house.add_fur(bed)house.add_fur(wardrobe)print(house)
3.面向对象的继承
继承描述的是事物之间的所属关系,定义一个类时,可以从某哪个现有的类继承
3.1 继承的子类与父类
新的类称为子类,扩展类(subclass),被继承的类称为基类、父类或超类(Baseclass、Superclass)
class Father(object):def __init__(self,name,age):self.name = nameself.age = agedef eat(self):print('%s is eating big apple' %self.name)def set_goal(self):print('%s sets a goal' %self.name)
注意:子类与父类有相同方法时,用子类的方法;方法不同时,用父类的方法
3.2 多继承
class D():def test(self):print('test in D...')class C(D):pass# def test(self):#print('test in C...')class B(D):pass# def test(self):#print('test in B...')class A(B,C):pass# def test(self):#print('test in A...')a = A()a.test()
注意:在python3中默认新式类(object),是广度优先;在python2中是深度优先。
4. 私有属性和私有方法
注意:私有属性和私有方法一般在内部访问,用于测试等
class Student(object):def __init__(self,name,age):self.name = nameself.__age = agedef __get_info(self):print('%s is %s years old' %(self.name,self.__age))student1 = Student('xiaoming',10)print(student1.name)print(student1._Student__age)student1._Student__get_info()
注意:可以通过间接使用的方法来外部调用
class Student(object):def __init__(self,name,age):self.name = nameself.__age = agedef __get_info(self):print('%s is %s years old' %(self.name,self.__age))def get_age(self):print(self.__age)def set_age(self,age):if 0 < age < 100:self.__age = ageprint('success!')else:raise Exception('Error!')student = Student('xiaoming',10)student.set_age(80)
5.面向对象的多态
多态:当需要更多的子类时只需要继承父类,即同一个操作作用于不同的对象有不同的解释
扩展式开放:允许子类重写父类的方法或函数
对修改封闭:不重写,直接继承父类的函数
class Student():def get_score(self):print('Student score...')class Chinese():def get_score(self):print('Chinese score...')class Math():def get_score(self):print('Math score...')student1 = Student()student2 = Chinese()student3 = Math()student1.get_score()student2.get_score()student3.get_score()
如果觉得《Python中的面向对象(类的实例化 面向对象的封装 继承与多态)》对你有帮助,请点赞、收藏,并留下你的观点哦!