各位同学好,本章节和大家分享一下面向对象编程的一些方法,通过一些案例带大家由浅入深掌握面向对象的编程。

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) 类实例化的基本方法相关推荐

  1. 八、Java面向对象编程(类、对象、方法、重载、可变参数、作用域、构造器、this本质)

    文章目录 Java面向对象编程(类.对象.方法.重载.可变参数.作用域.构造器.this本质) 一.类与对象 1. 类与对象的引出 2. 使用现有技术解决 3. 现有技术解决的缺点分析 4. 类与对象 ...

  2. C++ Primer 学习笔记_72_面向对象编程 --句柄类与继承[续]

    面向对象编程 --句柄类与继承[续] 三.句柄的使用 使用Sales_item对象能够更easy地编写书店应用程序.代码将不必管理Item_base对象的指针,但仍然能够获得通过Sales_item对 ...

  3. Python面向对象编程:类继承和其衍生术语

    Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...

  4. Java_面向对象基础(类、对象、方法和构造函数)

    Java的面向对象基础(类.对象.方法和构造函数) 面向对象的基本概念 面向对象的设计思想 什么是类 什么是对象 类的定义 设计面向对象的例子 步骤一:设计动物这个类 步骤二:创建具体的动物 步骤三: ...

  5. 深究并行编程Parallel类中的三大方法 (For、ForEach、Invoke)和几大编程模型(SPM、APM、EAP、TAP)

    一. 并行编程 1. 区分串行编程和串行编程 ①. 串行编程:所谓的串行编程就是单线程的作用下,按顺序执行.(典型代表for循环 下面例子从1-100按顺序执行) ②. 并行编程:充分利用多核cpu的 ...

  6. java猫抓老鼠_用猫抓老鼠的实例理解java中面向对象的编程与类和对象以及方法的概念...

    今天看到马士兵讲的关于面向对象编程的思路,用了一个猫抓老鼠的例子,我觉得这个例子非常形象,于是写在这里,方便学习理解和以后查看 class cat{ //声明一个类–"猫" int ...

  7. [Java入门笔记] 面向对象编程基础(二):方法详解

    2019独角兽企业重金招聘Python工程师标准>>> 什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能 ...

  8. python对象编程例子-python(十二)面向对象编程、类

    面向对象编程 面向对象--Object Oriented Programming,简称oop,是一种程序设计思想.在说面向对象之前,先说一下什么是编程范式,编程范式你按照什么方式来去编程,去实现一个功 ...

  9. 对象属性的调用_PyQt5面向对象编程,类和类的继承

    "前面的文章讲了新建一个面板的代码流程,但是它是面向过程的,这种编程思路繁琐且不易移植,而面向对象的编程思路就没有这些问题" 01面向对象编程 假设我们想制作几个面板,每个面板上有 ...

最新文章

  1. Stored Procedure 里的 WITH RECOMPILE 到底是干麻的?
  2. 从人生,从马克思主义哲学角度对于软件设计的思考20090824
  3. ArcGIS for window mobile 数据打开
  4. c++项目源码_C/C++学习日记:用C++制作餐饮管理系统(附源码),可以用来做毕设的项目!...
  5. Python入门、进阶经典PDF下载
  6. 额尔古纳的俄罗斯女孩
  7. TOTP 介绍及基于 C# 的简单实现
  8. 动态规划 —— 背包问题 P08 —— 泛化物品背包
  9. c语言指针如何增加内存大小,C语言如何给指针分配内存?
  10. 12种Javascript解决常见浏览器兼容问题的方法
  11. 蚂蚁金服数据分析平台演进及数据分析方法应用.pdf(附PPT下载链接)
  12. 国内IDC成立SOC安全运营中心
  13. 虚拟化工具介绍 (资源)
  14. (原創) 如何破解Quartus II 6.0? (IC Design) (Quartus II) (Nios II)
  15. Otsu详细算法解析
  16. 图解css3:核心技术与案例实战. 导读
  17. 超人再起 Superman Returns
  18. 【调剂】济南大学智能计算与科学计算课题组现接收计算机专业 (学术型) 硕士生调剂...
  19. matlab函数性质探讨答案,matlab函数性质探讨
  20. 使用cordova将Ext JS 6.2的Modern应用程序打包为安卓APP

热门文章

  1. Android 使用adb 抓取日志信息
  2. Android 补间动画(Tween Animation)
  3. Android 动态广播与静态广播
  4. 2017-04-09,周日整理
  5. 如何在 CentOS 7 中安装或升级最新的内核
  6. TCP/IP协议三次握手与四次握手流程解析
  7. 遥控车_vijos1458_纪中1724_水
  8. loadrunner支持https协议的操作方法-经验总结
  9. jQuery-1.9.1源码分析系列(四) 缓存系统
  10. 【Winform】锐浪报表使用