文章目录

  • 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中的面向对象(类的实例化,面向对象的封装、继承与多态)相关推荐

  1. python中定义一个类、实例化时传入的参数如何传递_用实例分析Python中method的参数传递过程...

    什么是method? function就是可以通过名字可以调用的一段代码,我们可以传参数进去,得到返回值.所有的参数都是明确的传递过去的. method是function与对象的结合.我们调用一个方法 ...

  2. Python中的元类是什么?

    元类是什么,我们将它们用于什么? #1楼 请注意,此答案适用于2008年编写的Python 2.x,元类在3.x中略有不同. 元类是使"类"工作的秘诀. 新样式对象的默认元类称为& ...

  3. Python中的元类及元类实现的单例模式

    https://www.cnblogs.com/tkqasn/p/6524879.html 在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩:在看python cookbook中关于元 ...

  4. Python中的元类

    Python中的元类 Python一切皆对象,所以类也是对象. 我们知道,对象是通过类实例化创建出来的.但我们创建类时并没有进行实例化操作,为什么类也是对象呢? 类既然是对象,类肯定是另外某个类的实例 ...

  5. python中用于释放类占用的资源的方法是()_编写一个简易计算器,要求根据输入的数字和四则运算符号,计算运算结果并输出。_学小易找答案...

    [简答题]20191220 课前作业 新工作页4.1的3-5-3页的填空题,参考教材P135-P144 [简答题]AutoCAD改编视图,尽量不用虚线 1. 主视图采用局部剖,表达右上角小圆筒(及孔) ...

  6. python简介怎么写-python中如何写类

    类的定义 Python中,定义类是通过class关键字,例如我们定义一个存储学生信息的类: class Student(object): pass class后面紧接着是类名,即Student,类名通 ...

  7. Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数)...

    Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数) https://mubu.com/doc/1AqL_M0IbW 继承之钻石继承 多态 封装 几个装饰 ...

  8. Python中的property类和@property装饰器

    Python中的property类和@property装饰器 在Python的类中,为了避免使用者直接在类的外部操作属性和方法,我们可以将属性和方法设置成私有属性和私有方法. 如果我们需要访问私有属性 ...

  9. python定义类的程序_python扫码签到程序python中如何定义类

    什么是类? 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 什么是方法? 类中的函数即为方法 如何定义一个类? 定义类,语法格式如下: < ...

  10. Php扫码签到功能怎么实现,python扫码签到程序python中如何定义类

    什么是类? 用来描述具有相同的属性和方法的对象的集合.它定义了该集合中每个对象所共有的属性和方法.对象是类的实例. 什么是方法? 类中的函数即为方法 如何定义一个类? 定义类,语法格式如下: < ...

最新文章

  1. 工作 10 年后转行程序员,如今 35+ 岁并不焦虑!
  2. Androidn Notification的使用,解决找不到setLatestEventInfo方法
  3. 【集训队作业2018】喂鸽子
  4. 1. 初探MongoDB —— 介绍、安装和配置
  5. Salt Master外部Job Cache配置
  6. 用java写jsp页面跳转页面跳转_五种 JSP页面跳转方法详解
  7. LINUX环境并发服务器的三种实现模型
  8. SQL删除重复数据并只保留一条
  9. layui参考文档地址
  10. win10系统的 3Dsmax2020 安装失败报错 1603 解决方案 亲测可用
  11. PowerManagerService分析-updatePowerStateLocked方法
  12. 赵小楼:《天道》《遥远的救世主》深度解析(28)人文意识发展到今天,我们应该怎么改变?
  13. 我的学习笔记001--private protected public internal mxx
  14. 【华为OD机试真题2023 JAVA】不含101的数
  15. 对象存储OSS之阿里云OSS介绍及开通
  16. Catalan 数之Python演示
  17. Unity之webGL问题汇总
  18. 迪赛智慧数——其他图表(平行坐标图):家庭未来资产配置意愿
  19. 计算机网络体系结构详解(7层、5层、4层的区别)
  20. R语言使用多个数据类型不同的向量数据创建一个dataframe数据对象、使用names函数查看dataframe数据的列名称

热门文章

  1. MyBatis 整合Oracle 报错:java.sql.SQLException: ORA-01008: 并非所有变量都已绑定
  2. devtools最新安装方法
  3. 华为机试真题 C++ 实现【机器人走迷宫】
  4. 区块链/以太坊/读书笔记/精通以太坊思维导图
  5. 『深度应用』OneFlow快速上手指南
  6. apache knox 安装使用步骤
  7. 商业项目中选择框架和库的原则
  8. Unity3D开发技术研究-SteamVR2.0
  9. 《小王子》80 周年:安东尼‧圣修伯里的笔下著名主人公进入元宇宙
  10. 对CAN/CAN-FD/ETH/Camera同步采集的数据采集工具软件