失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > Python中的面向对象(类的实例化 面向对象的封装 继承与多态)

Python中的面向对象(类的实例化 面向对象的封装 继承与多态)

时间:2023-04-20 23:06:05

相关推荐

Python中的面向对象(类的实例化 面向对象的封装 继承与多态)

文章目录

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中的面向对象(类的实例化 面向对象的封装 继承与多态)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。