【面向对象编程】(1) 类实例化的基本方法
各位同学好,本章节和大家分享一下面向对象编程的一些方法,通过一些案例带大家由浅入深掌握面向对象的编程。
1. 最基本的类实例化
创建类的方法是 class 变量名: ,实例化方法是 类名() ,分配属性的方法是 实例名.属性名 = 值
#(1)创建类
class Item: # 创建类的方法是 class 类名:pass # 不执行任何内容#(2)实例化
item1 = Item() # 创建Item类的实例化对象item1#(3)给实例化对象分配属性
item1.name = 'phone'
item1.price = 100
item1.quantity = 5#(4)打印结果
print(type(item1)) # <class '__main__.Item'>
print(type(item1.name)) # <class 'str'>
print(type(item1.price)) # <class 'int'>
print(type(item1.quantity)) # <class 'int'>
2. 在类中创建方法
在类的内部定义的函数,我们称之为方法,它可以运用于所有的类实例化对象上。我们在类的内部定义的函数,它的第一个参数默认是 self,代表类实例化对象,下面代码中是指item1。在类的外部调用类的内部定义的方法:对象名.方法名(参数)
#(1)定义类
class Item: # 创建类的方法是 class 类名:#(2)在类中创建方法# 当调用这个方法时,将对象本身作为第一个参数self传递def calculate_total_price(self, x, y): return x * y # 返回乘积#(3)实例化
item1 = Item() # 创建Item类的实例化对象item1#(4)给实例化对象分配属性
item1.name = 'phone'
item1.price = 100
item1.quantity = 5#(5)调用方法,self代表item1,传入两个参数x代表价格,y代表数量,
res = item1.calculate_total_price(item1.price, item1.quantity)
print(res) # 500# 再实例化一个
item2 = Item() # 创建Item类的实例化对象item1
item2.name = 'MacBook'
item2.price = 1000
item2.quantity = 3
print(item2.calculate_total_price(item2.price, item2.quantity))
# 输出 3000
3. 类的初始化
3.1 初始化无默认值
在类实例化之后,需要分别给每个对象分配属性,如上一节的第(4)步。如果对象很多的话,极大增加了工作量。因此我们希望在类实例化对象的时候就能自动给对象分配属性。初始化方法:在类中定义 def __init__(self, 参数): ,在类实例化时,会自动执行初始化函数中的所有内容,自动完成属性分配。
#(1)定义类
class Item: # 创建一个类#(2)初始化,实例化这个类时,会自动执行init内容def __init__(self, name, price, quantity):# 动态属性分配self.name = name # 给实例化属性赋值,相当于item1.name = 'phone'self.price = price # 相当于item1.price = 100self.quantity = quantity # 相当于item2.quantity = 3#(3)实例化,创建Item类的实例化对象item1
# 自动执行初始化中的内容,不需要一个一个去定义
item1 = Item('Phone', 100, 5)
item2 = Item('MacBook', 1000, 3)# 打印结果
print('name1:', item1.name, 'price1:', item1.price, 'quantity1:', item1.quantity)
print('name2:', item2.name, 'price2:', item2.price, 'quantity2:', item2.quantity)
# name1: Phone price1: 100 quantity1: 5
# name2: MacBook price2: 1000 quantity2: 3
3.2 初始化有默认值
在初始化的过程中,可以给属性设置默认值。那样的话,在实例化时,如果不给定某个属性的值,那么这个属性就被赋予默认值。如下面在初始化时,已经给定了price和quantity这两个属性的默认值,因此item1就直接使用这两个属性的默认值,item2改变这两个属性的默认值。
#(1)创建类
class Item: # 创建一个类#(2)初始化,实例化这个类时,会自动执行init内容# price和quantity存在默认值,可以不用传值def __init__(self, name, price=50, quantity=10): # 动态属性分配self.name = name # 给实例化属性赋值,相当于item1.name = 'phone'self.price = price # 相当于item1.price = 100self.quantity = quantity # 相当于item2.quantity = 3#(3)实例化,创建Item类的实例化对象item1
# 自动执行初始化中的内容,不需要一个一个去定义
item1 = Item('Phone') # 使用默认值的price和quantity
item2 = Item('MacBook', 1000, 3) # 不使用默认值,自己赋值# 打印结果
print('name1:', item1.name, 'price1:', item1.price, 'quantity1:', item1.quantity)
print('name2:', item2.name, 'price2:', item2.price, 'quantity2:', item2.quantity)
# name1: Phone price1: 50 quantity1: 10
# name2: MacBook price2: 1000 quantity2: 3
4. 初始化后调用类中定义的方法
接着类初始化之后,在类中定义方法,第一个参数默认是实例化对象 self,这时候不需要传入额外参数。因为经初始化之后的对象,就已经被赋予了属性及属性值,可直接通过 self.属性名 读取该属性值。
#(1)定义类
class Item: #(2)初始化,如果实例化时不给定实例化属性的值,那就使用默认值def __init__(self, name, price=100, quantity=10):# 给实例化对象分配属性self.name = nameself.price = priceself.quantity = quantity#(3)在类中定义方法,self代表实例化对象def calculate_total_price(self):# 实例化对象在初始化过程中已经附有了属性,可直接在定义的方法中计算return self.price * self.quantity#(4)创建Item类的实例化对象item1
item1 = Item('Phone', 100, 5) # 自定义各个属性的值#(5)调用类中定义的方法,将item1作为对象self传入该方法
res = item1.calculate_total_price()
print(res) # 500# ==2== 补充
# 这里在实例化对象过程中没有指定数据类型,如果我们传入的price属性的值是字符串会发生什么呢
item1 = Item('Phone', '100', 5) # 传入各个属性的值
res = item1.calculate_total_price() # 调用类方法计算price和quantity的乘积
# 相当于'100'*5,即把字符串100打印5次
print(res) # 100100100100100
可是,如果在类实例化的时候,传入的属性值的类型不符合要求,就得不到想要的结果。比如传入的price是字符串类型的'100',而quantity是整型的5,这两个不同的数据类型相乘,'100'*5表示将字符串'100'打印5次,得到的不是我们预期的结果。下面讲一下如何处理这种情况。
5. 初始化时,指定传入的数据类型
在初始化函数中指定数据类型,属性名: 数据类型,在类实例化的时候会提醒需要的什么样的数据类型。如下,name属性指定数据类型为str字符串类型,price属性为浮点类型,quantity属性已经赋予默认值,那么它的数据类型和默认值的数据类型相同。
#(1)创建类
class Item: #(2)初始化,self代表实例化对象# 指定name属性的值为字符串类型,price属性的值为浮点类型,# quantity属性已经附有默认值,不需要再指定类型,因为quantity的数据类型就是默认值的数据类型def __init__(self, name: str, price: float, quantity=10):# 给实例化对象分配属性self.name = nameself.price = priceself.quantity = quantity#(3)定义类方法def calculate_total_price(self):# 计算乘积return self.price * self.quantity#(4)创建Item类的实例化对象
item1 = Item('Phone', 100) # 指定name属性和price属性,quantity属性使用默认值#(5)调用类中的方法
res = item1.calculate_total_price()
print(res) # 1000
6. 初始化时,检查输入值是否符合预期
这里用到 assert 方法。在上一节中,我们规定了数据类型,但如果数据类型输入对了,但是值的范围不满足要求那要怎么办呢。方法: assert 条件, 报错内容
如下面代码中的 assert price >= 0, f'Price {price} is not greater or equal to 0' 。意思是,如果price接收的属性值大于等于0,那就正常运行;如果price的值小于0,程序就报错,报错内容是逗号后面的内容。
#(1)创建一个类
class Item: #(2)初始化,self代表实例化对象,指定实例化属性的数据类型def __init__(self, name:str, price:float, quantity=10):#(3)判断输入值是否满足要求,不满足则报错,报错内容是逗号后面的# 比如,要求每个实例的价格属性price是大于0的,满足要求则不显示逗号后面的内容assert price >= 0, f'Price {price} is not greater or equal to 0' assert quantity >= 0, f'Quantity {quantity} is not greater or equal to 0'#(4)给每个实例属性赋值self.name = nameself.price = priceself.quantity = quantity#(5)定义类方法def calculate_total_price(self):# 计算乘积return self.price * self.quantity#(6)Item类的实例化对象item1
item1 = Item('Phone', -100, 3)#(7)调用类实例化方法
res = item1.calculate_total_price()
print(res)
【面向对象编程】(1) 类实例化的基本方法相关推荐
- 八、Java面向对象编程(类、对象、方法、重载、可变参数、作用域、构造器、this本质)
文章目录 Java面向对象编程(类.对象.方法.重载.可变参数.作用域.构造器.this本质) 一.类与对象 1. 类与对象的引出 2. 使用现有技术解决 3. 现有技术解决的缺点分析 4. 类与对象 ...
- C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]
面向对象编程 --句柄类与继承[续] 三.句柄的使用 使用Sales_item对象能够更easy地编写书店应用程序.代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对 ...
- Python面向对象编程:类继承和其衍生术语
Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...
- Java_面向对象基础(类、对象、方法和构造函数)
Java的面向对象基础(类.对象.方法和构造函数) 面向对象的基本概念 面向对象的设计思想 什么是类 什么是对象 类的定义 设计面向对象的例子 步骤一:设计动物这个类 步骤二:创建具体的动物 步骤三: ...
- 深究并行编程Parallel类中的三大方法 (For、ForEach、Invoke)和几大编程模型(SPM、APM、EAP、TAP)
一. 并行编程 1. 区分串行编程和串行编程 ①. 串行编程:所谓的串行编程就是单线程的作用下,按顺序执行.(典型代表for循环 下面例子从1-100按顺序执行) ②. 并行编程:充分利用多核cpu的 ...
- java猫抓老鼠_用猫抓老鼠的实例理解java中面向对象的编程与类和对象以及方法的概念...
今天看到马士兵讲的关于面向对象编程的思路,用了一个猫抓老鼠的例子,我觉得这个例子非常形象,于是写在这里,方便学习理解和以后查看 class cat{ //声明一个类–"猫" int ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...
- python对象编程例子-python(十二)面向对象编程、类
面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一个功 ...
- 对象属性的调用_PyQt5面向对象编程,类和类的继承
"前面的文章讲了新建一个面板的代码流程,但是它是面向过程的,这种编程思路繁琐且不易移植,而面向对象的编程思路就没有这些问题" 01面向对象编程 假设我们想制作几个面板,每个面板上有 ...
最新文章
- Stored Procedure 里的 WITH RECOMPILE 到底是干麻的?
- 从人生,从马克思主义哲学角度对于软件设计的思考20090824
- ArcGIS for window mobile 数据打开
- c++项目源码_C/C++学习日记:用C++制作餐饮管理系统(附源码),可以用来做毕设的项目!...
- Python入门、进阶经典PDF下载
- 额尔古纳的俄罗斯女孩
- TOTP 介绍及基于 C# 的简单实现
- 动态规划 —— 背包问题 P08 —— 泛化物品背包
- c语言指针如何增加内存大小,C语言如何给指针分配内存?
- 12种Javascript解决常见浏览器兼容问题的方法
- 蚂蚁金服数据分析平台演进及数据分析方法应用.pdf(附PPT下载链接)
- 国内IDC成立SOC安全运营中心
- 虚拟化工具介绍 (资源)
- (原創) 如何破解Quartus II 6.0? (IC Design) (Quartus II) (Nios II)
- Otsu详细算法解析
- 图解css3:核心技术与案例实战. 导读
- 超人再起 Superman Returns
- 【调剂】济南大学智能计算与科学计算课题组现接收计算机专业 (学术型) 硕士生调剂...
- matlab函数性质探讨答案,matlab函数性质探讨
- 使用cordova将Ext JS 6.2的Modern应用程序打包为安卓APP