简说Python之面向对象
之前介绍了函数。对象代表了什么。可以称为“一篮子”计划,把数据属性和方法集合在一起,汇总成一个对象(object)。在C++中,这个称为类的概念。
Python对象
对象可以比喻为一个物种,例如:狗,它有颜色,名字,年龄,种类等特性,它的行为动作,会吼,会跳,会睡觉等等。而对象=action+attribute。
举例:我们设置一个对象的属性和动作。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class dog:
def jump(self):
print("名字叫",self.name,"的小狗跳起来了")
def introduce(self):
print("这只小狗叫做",self.name,",它是一只",self.color,"的小狗,","它今年",self.age)
mydog = dog() #类实例化
mydog.name ="小黄" #设置name属性
mydog.color = "棕色" #设置color属性
mydog.age = "8岁" #设置age属性
mydog.jump()
mydog.introduce()
另存为object01.py,执行结果如下:
G:\Py>python object01.py
名字叫 小黄 的小狗跳起来了
这只小狗叫做 小黄 ,它是一只 棕色 的小狗, 它今年 8岁
上述结果,可以看出对象的一些属性,不用前期定义,可以在实例化之后。再设置属性。不用先前定义好,有别于其他语言。
对象的内置方法
__init__方法
除了想之前那样,后面定义对象的属性。可以使用__init__方法,在创建一个类的实例的时候,通过传参的方式。用来初始化你要设置对象的属性值。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class dog:
def __init__(self, name, color, age):
self.name = name
self.color = color
self.age = age
def jump(self):
print("名字叫",self.name,"的小狗跳起来了")
def introduce(self):
print("这只初始化小狗叫做",self.name,",它是一只",self.color,"的小狗,","它今年",self.age)
mydog = dog("小黄","棕色","8岁")
mydog.jump()
mydog.introduce()
另存为object02.py,执行结果如下:
G:\Py>python object02.py
名字叫 小黄 的小狗跳起来了
这只初始化小狗叫做 小黄 ,它是一只 棕色 的小狗, 它今年 8岁
__str__方法
如果不使用__str__方法,直接执行实例化,等到的效果如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class dog:
def __init__(self, name, color, age):
self.name = name
self.color = color
self.age = age
def jump(self):
print("名字叫",self.name,"的小狗跳起来了")
def introduce(self):
print("这只初始化小狗叫做",self.name,",它是一只",self.color,"的小狗,","它今年",self.age)
mydog = dog("小黄","棕色","8岁")
print (mydog)
执行的效果如下:
G:\Py>python object03.py
<__main__.dog object at 0x000000000257CFC8>
上面说明:实例在main主程序中,定义了一个dog对象,内存位置为:0x000000000257CFC8
如果想显示其他内容,可以使用特殊方法__str__,如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class dog:
def __init__(self, name, color, age):
self.name = name
self.color = color
self.age = age
def __str__(self):
msg = "this object called:" +self.name
return msg
mydog = dog("小黄","棕色","8岁")
print (mydog)
另存为:object04.py,得出如下的结果:
G:\Py>python object04.py
this object called:小黄
对象的多态
多态(polymorphism),表示在不同的类里,有同名的方法。
举例如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class Triangle:
def __init__(self, width, height):
self.width = width
self.height = height
def getArea(self):
area = self.width * self.height / 2.0
return area
class Square:
def __init__(self, size):
self.size = size
def getArea(self):
area = self.size * self.size
return area
myTriangle = Triangle(4,5)
TriangleArea = myTriangle.getArea()
print("三角形的面积为:",TriangleArea)
mySquare = Square(4)
SquareArea = mySquare.getArea()
print("正方形的面积为:",SquareArea)
另存为object05.py,结果如下:
G:\Py>python object05.py
三角形的面积为: 10.0
正方形的面积为: 16
对象的封装
由于抽象的原则,调用对象的时候,无需知道里面的细节。直接调用其对象的方法。等到想要的结果。如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class dog:
def setName(self,name):
self.name = name
def getName(self):
print("小狗的名字叫做:",self.name)
mydog = dog()
mydog.setName("小黑")
mydog.getName()
另存为:object06.py,执行结果如下:
G:\Py>python object06.py
小狗的名字叫做: 小黑
对象的继承
代码的重用,派生了继承的思路。通过继承创建的类为:子类或者派生类。被继承的类称为:基类,父类或超类。
语法:
class 派生类名(基类名)
...
举例如下:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class dog:
def __init__(self, name, color, age):
self.name = name
self.color = color
self.age = age
def jump(self):
print("名字叫",self.name,"的小狗跳起来了")
def introduce(self):
print("这只初始化小狗叫做",self.name,",它是一只",self.color,"的小狗,","它今年",self.age)
class Zdog(dog):
def sleep(self):
print("名字叫",self.name,"的小狗睡着了")
mydog = Zdog("小黄","棕色","8岁") #调用父类的初始化方法
mydog.introduce() #调用父类的introduce
mydog.sleep() #调用子类的方法
另存为:object07.py,执行效果如下:
G:\Py>python object07.py
这只初始化小狗叫做 小黄 ,它是一只 棕色 的小狗, 它今年 8岁
名字叫 小黄 的小狗睡着了
简说Python之面向对象的更多相关文章
- 简学Python第六章__class面向对象编程与异常处理
Python第六章__class面向对象编程与异常处理 欢迎加入Linux_Python学习群 群号:478616847 目录: 面向对象的程序设计 类和对象 封装 继承与派生 多态与多态性 特性p ...
- PYTHON开发--面向对象基础入门
面向对象 一:面向对象初级 1.思考:首先在python中,以前我们以前用到的几乎都是函数式编程,但是有时候函数式编程其中代码重复利用率太高,我们往往会把这些重复代码写进一个函数日后去调用,所以呢,今 ...
- Python之面向对象与类
本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 子类属性查找顺序 一.面向对象的概念 1. "面向对象(OOP)"是什么? ...
- 【转】Python之面向对象与类
[转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...
- Python之面向对象封装
Python之面向对象封装 封装不是单纯意义的隐藏 什么是封装: 将数据放在一个设定好的盒子里,并标出数据可以实现的功能,将功能按钮外露,而隐藏其功能的工作原理,就是封装. 要怎么封装: 你余额宝有多 ...
- python初始面向对象
阅读目录 楔子 面向过程vs面向对象 初识面向对象 类的相关知识 对象的相关知识 对象之间的交互 类命名空间与对象.实例的命名空间 类的组合用法 初识面向对象小结 面向对象的三大特性 继承 多态 封装 ...
- 简说Python发展及其就业前景
简说python 发展历史 Python是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. python从ABC语言 ...
- Python 【面向对象】
前言 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言 ...
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- Python的面向对象3
接下来,我们接着讲Python的面向对象,在上一次的博客中,我们详细介绍了类与对象的属性,今天,我们来详细介绍一下面向对象中的方法! 1.定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外 ...
随机推荐
- KingabseES例程之巧用QueryMapping解决查询硬解析问题
什么是QueryMapping KingbaseES Query Mapping 是一种查询映射功能.有过SQL优化经历的人都知道,对于有些SQL性能问题,可能需要涉及到SQL层面的修改,这不仅麻烦, ...
- C++类型双关
Σ(っ °Д °;)っ #include<iostream> struct Entity { int x, y; int* GetPtr() { return &x; } /*En ...
- BIO ,NIO ,AIO
一.同步阻塞I/O(BIO): 服务器实现模式: 一个连接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理 弊端:如果这个连接不做任何事情会造成不必要的线程开销 解决措施:可以通过线程池 ...
- #SG函数,记忆化搜索#HDU 4111 Alice and Bob
题目 Alice和Bob两个好朋友又开始玩取石子了. 游戏开始时,有\(n\)堆石子排成一排,然后他们轮流操作(Alice先手),每次操作时从下面的规则中任选一个: ·从某堆石子中取走一个 ·合并任意 ...
- #状压dp,背包,贪心#洛谷 5997 [PA2014]Pakowanie
题目 你有 \(n\) 个物品和 \(m\) 个包.物品有重量,且不可被分割: 包也有各自的容量.要把所有物品装入包中,至少需要几个包? 分析 考虑物品的数量很小,首先优先选容量大的背包, 设\(f[ ...
- 深入理解 C++ 右值引用和移动语义:全面解析
C++11引入了右值引用,它也是C++11最重要的新特性之一.原因在于它解决了C++的一大历史遗留问题,即消除了很多场景下的不必要的额外开销.即使你的代码中并不直接使用右值引用,也可以通过标准库,间接 ...
- 探索“智”感生活,HMS Core线上Codelabs挑战赛第4期开始!
HMS Core线上Codelabs挑战赛第4期正式开始!我们向所有实践力超强.创新力满满的开发者发出邀请,用你的超级"码"力,解锁更多应用价值! 生活里,我们被手机"秒 ...
- 将py文件编译成pyc
核心代码 import compileall compileall.compile_file("a.py", legacy=True, force=True) 演示步骤 1.新建 ...
- failed to push some refs to xxxx
***************ssh 秘钥上传远程仓库 1. 添加远程仓库ssh 命令 git remote add origin git@github.com:ThreeNut/zou.gi ...
- 超强阵容!HarmonyOS极客马拉松2023专家评审团来袭!
数十位重量级专家现身决赛现场,为参赛者提供多角度专业点评.12支队伍,46位选手,齐聚东莞·松山湖,围绕HarmonyOS技术特性,共同挑战36小时极限编程,谁将问鼎决赛之巅,8.3日-5日,我们拭 ...