025.Python面向对象以及对对象的操作
一 面向对象基本概念
1.1 OOP面向对象的程序开发
- 用几大特征表达一类事物称为一个类,类更像是一张图纸,表达只是一个抽象概念
- 对象是类的具体实现,更像是由这图纸产出的具体物品,类只有一个,但是对象可以同伙类实例化多个
- 对象是类的示例,类是对象的模板
- 类的成员只有方法和属性,不要裸露的吧判断和循环直接写在类中,而是用方法包起来
1.2 类的定义
class MyClass:
pass class MyClass(): #推荐使用
pass class MyClass(object):
pass
1.3 类的实例化
class MyClass():
pass # 类的实例化 也可以叫做 实例化对象 obj就是对象
obj = MyClass()
1.3 类的基本结构
定义:
- 成员属性
- 成员方法
调用
- 对象.成员属性
- 对象.成员方法
class MyClass():
# 成员属性
color = "小汽车的颜色是蓝色的"
# 成员方法
def run(self):
print("小汽车会pao") # 实例化对象
obj = MyClass()
# 利用对象obj,调用类中的成员属性
print(obj.color)
# 利用对象obj 调用类中的成员方法
obj.run()
##反面示例
class MyClass(): #这种方式,语法允许,而且可以被执行,但是严禁使用,类中只有成员属性和成员方法,不允许其他存在
if 5==5:
print("条件成立")#类中的代码,不需要实例化,就可以从上到下依次执行
1.4 类的命名
- 让别人看代码时,更加读懂语意.
- 大驼峰命名法: 每个单词首字符都大写 MyCar
- 小驼峰命名法: 只有第一个单词首字符小写,剩下都大写 myCar
- 命名一个类名的时,推荐使用大驼峰命名法
1.5 面向对象的三大特征
- 封装:对类中成员的属性和方法的保护,控制外界对内部成员的访问,修改和删除等操作
- 继承:一个类除了自身拥有的属性方法外,还获取了另一个类的成员和属性的方法
- 多态:不同的子类对象,调用相同的父类方法,产生不同的执行结果
1.6 成员等级
python对成员的保护分为两个等级
1 私有的private
- 在本内部可以访问,类的外部不可以访问(python中,属性或者方法前面加上两个下划线__)
2 共有的:public
- 在本类的内部和外部都可以访问
在其他高级语言中,如java,php,c++语言,有三个等级,private public protect
私有成员的改名策略[__类名__成员名]
二 对象的相关操作
- 实例化的对象访问共有成员属性和方法
- 实例化的对象动态添加共有成员的属性和方法
- 实例化的对象删除公有成员属性和方法
2.1 定义一个基本的类
# 类的封装
class Car():
#共有成员属性
price = "120万"
#私有成员属性
__oil = "保密"
def run(self): #共有成员方法
print ("性能好,跑得快")
def __oil_info(): #私有成员方法
print ("油耗寿命保密")
obj = Car() #实例化一个对象
res = obj.price #实例化的对象访问公有成员的属性和方法
print (res)
obj.run()
执行
[root@node10 python]# python3 test.py
120万
性能好,跑得快
- 普通方法:没有任何参数传递,只能类调用
- 绑定方法:把默认传参的方法叫做绑定方法,绑定到对象(默认传对象),绑定到类(默认传类)
- 非绑定方法:静态方法(无需任何参数,对象和类都能调用)
self就是被对象约定俗成的写法,可以自动将对象传递给方法
class Car():
price = "120万"
__oil = "保密"
def run(self):
print ("性能好,跑得快")
def run2(self,num): #定义另一个num
print (num)
def __oil_info():
print ("油耗寿命保密")
obj = Car()
res = obj.price
print (res)
obj.run()
obj.run2() #调用报错
执行

修改
class Car():
price = "120万"
__oil = "保密"
def run(self):
print ("性能好,跑得快")
def run2(self,num):
print (num)
def __oil_info():
print ("油耗寿命保密")
obj = Car()
res = obj.price
print (res)
obj.run()
obj.run2(109)
执行
[root@node10 python]# python3 test.py
120万
性能好,跑得快
109
2.2 类的封装特性
obj.__oil体现了类的封装性
class Car():
price = "120万"
__oil = "保密"
def run(self):
print ("性能好,跑得快")
def run2(self,num):
print (num)
def __oil_info():
print ("油耗寿命保密")
obj = Car()
res = obj.price
print (res)
obj.run()
obj.run2(109)
obj.__oil
执行

2.3 实例化的对象动态添加共有成员的属性和方法
class Car():
price = "120万"
__oil = "保密"
def run(self):
print ("性能好,跑得快")
def run2(self,num):
print (num)
def __oil_info():
print ("油耗寿命保密")
obj = Car()
res = obj.price
print (res)
obj.run()
obj.run2(109)
#实例化的对象动态添加共有成员的属性和方法
obj.color = "黄色"
print (obj.color)
执行
[root@node10 python]# python3 test.py
120万
性能好,跑得快
109
黄色
2.4 使用__dict__查看成员属性
class Car():
price = "120万"
__oil = "保密"
def run(self):
print ("性能好,跑得快")
def run2(self,num):
print (num)
def __oil_info():
print ("油耗寿命保密")
obj = Car()
res = obj.price
print (res)
obj.run()
obj.run2(109)
obj.color = "黄色"
print (obj.color)
执行
在这里发现,没有price,__oil的属性,也没有run的方法,是因为这些属于类,他的归属是类,而非对象,只可以用
120万
性能好,跑得快
109
黄色
{'color': '黄色'}
2.5 实例化的对象动态添加公有成员方法
- 添加无参方法
- 添加有参方法
- 通过lambda表达式来进行动态添加
class Car():
price = "120万"
__oil = "保密"
def run(self):
print ("性能好,跑得快")
def run2(self,num):
print (num)
def __oil_info():
print ("油耗寿命保密")
obj = Car()
res = obj.price
print (res)
obj.run()
obj.run2(109)
obj.color = "黄色"
print (obj.color)
# __dict__ 用dict魔术属性来查看对象的内部成员
print(obj.__dict__)
#添加无参方法
def fangxiangpan():
print("这是制造方向盘的方法")
# obj.fangxiangpan fangxiangpan是自定义的一个名字,是obj动态添加的成员方法
obj.fangxiangpan = fangxiangpan
obj.fangxiangpan()
print(obj.__dict__) #添加有参方法
def huibianxing(obj,name):
print("我的小车,可以变成"+name,"价格是:"+obj.price)
obj.bianxing = huibianxing
# obj.bianxing("hello kitty")
obj.bianxing(obj,"hello kitty")
#上面的方式,需要定义两个参数,一个是对象obj,另一个是那么,可以使用types动态添加方法
import types
#MethodType(函数,对象) 把函数绑定到哪个对象上
#绑定成功之后,在调用,系统会自动把这个对象当成参数进行传递
obj.bianxing = types.MethodType(huibianxing,obj)
# obj.bianxing = bianxing
obj.bianxing("hello ketty") #通过lambda表达式来进行动态添加
func = lambda : print("我是汽车人大黄蜂")
obj.dahuangfeng = func
obj.dahuangfeng() print(obj.__dict__)
执行
[root@node10 python]# python3 test.py
120万
性能好,跑得快
109
黄色
{'color': '黄色'}
这是制造方向盘的方法
{'color': '黄色', 'fangxiangpan': <function fangxiangpan at 0x7f79deb18e18>}
我的小车,可以变成hello kitty 价格是:120万
我的小车,可以变成hello ketty 价格是:120万
我是汽车人大黄蜂
{'color': '黄色', 'fangxiangpan': <function fangxiangpan at 0x7f79deb18e18>, 'bianxing': <bound method huibianxing of <__main__.Car object at 0x7f79dea45668>>, 'dahuangfeng': <function <lambda> at 0x7f79dea382f0>}
025.Python面向对象以及对对象的操作的更多相关文章
- python面向对象(类和对象及三大特性)
类和对象是什么 创建类 新式类 和 经典类 面向对象三大特性 继承 封装 多态 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使 ...
- Python——面向对象、绑定对象、组合
1. 面向过程VS面向对象 (1)面向过程 核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的复杂 ...
- python: 面向对象:类和对象调用类中的变量和方法
一. 面向对象初识 我们在生活中做事都是面向过程的,前面实现一些基本逻辑功能代码也是用面向过程的语句实现的,后来学了函数,把这些功能又装到了函数里.但用面向过程的方法去写程序,只能实现一个功能,我们要 ...
- Python面向对象:获取对象信息
学习笔记内容简介: 获取对象属性和方法的函数: type(): 判断对象类型 isinstance() : 判断class的类型 dir() : 获得一个对象的所有属性和方法 把属性和方法列出来是不够 ...
- Python面向对象——内置对象的功能扩展
1.扩展Python内置类 Python的数据类型 列表(list).字典(dict).集合(set).文件(file).字符串(str),这些都是对象 扩展list的功能,详解如图: 我们给列表添加 ...
- python面向对象——类和对象
一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程(流水线式) 优点:极大的降低了程序的复杂度 缺点:应用场景固定住了,可扩展性差 2.函数式编程 特点: a ...
- python 面向对象五 获取对象信息 type isinstance getattr setattr hasattr
一.type()函数 判断基本数据类型可以直接写int,str等: >>> class Animal(object): ... pass ... >>> type( ...
- Python 面向对象1-面向对象介绍
一.无论用什么形式来编程,我们都要明确记住以下原则: 1.写重复代码是非常不好的低级行为 2.你写的代码需要经常变更,写代码一定要遵循易读,易改的原则 3.函数编程与OOP(面向对象)的主要区别就是O ...
- python面向对象:类空间,对象空间, 组合
一. 类空间,对象空间 1. 类空间,对象空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变 ...
随机推荐
- (三)Struts2的Action(简单讲解版)
Actions是Struts2框架的核心,因为它们适用于任何MVC(Model View Controller)框架. 每个URL映射到特定的action,其提供处理来自用户的请求所需的处理逻辑.但a ...
- 算法很美,听我讲完这些Java经典算法包你爱上她
大家好,我是小羽. 对于编程来说的话,只有掌握了算法才是了解了编程的灵魂,算法对于新手来说的话,属实有点难度,但是以后想有更好的发展,得到更好的进阶的话,对算法进行系统的学习是重中之重的. 对于 Ja ...
- 死磕Spring之AOP篇 - Spring AOP总览
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...
- SqlServer存储过程应用二:分页查询数据并动态拼接where条件
前言 开发中查询功能是贯穿全文的,我们来盘一盘使用存储过程分页查询,并且支持动态拼接where条件. 划重点:支持动态拼接where条件 对存储过程的使用有疑问的同学去[SqlServer存储过程的创 ...
- Java基础 - List的两个子类的特点
List两个子类的特点 List的两个子类的特点 因为两个类都实现了List接口,所以里面的方法都差不多,那这两个类都有什么特点呢? ArrayList: 底层数据结构是数组,查询快,增删慢. Lin ...
- 一文简述Java IO
Java IO 本文记录了在学习Java IO过程中的知识点,用于复习和快速查阅,不够详细的部分可能会在后续补充. 什么是流 流:内存与存储设备(外存)之间传输数据的通道 IO:输入流输出流(如rea ...
- Markdown排版介绍
如何排版章节 Markdown: 大标题 ========== 小标题 ---------- # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题 例如 三级 和四级 发布后的效果: 三 ...
- adb 简介与常用命令
1. abd 简介 2. adb 常用命令 1. abd 简介 adb 的全称为 Android Debug Bridge,就是起到调试桥的作用. 借助 adb 工具,我们可以管理设备或手机模拟器的状 ...
- 硬件篇-03-SLAM移动底盘电气设计
最近因为在忙毕设,专栏已经1个多月没更,对于托更我很抱歉.不过这几周真的没什么时间,Rick&Morty的最新集我到现在都还没看哈哈. 现在毕设已经搞得差不多了,水专栏文章的快乐生 ...
- 【手打】coredns单台使用
目录: coredns介绍 coredns安装 corendns配置 coredns介绍 CoreDNS 其实就是一个 DNS 服务,而 DNS 作为一种常见的服务发现手段,所以很多开源项目以及工程师 ...