2021小白Python学习记录Day7 面向对象基础(上) (定义类和对象、__init__传参、self、魔术方法)
目录
一、定义类和对象
1.定义类
2.创建一个对象
2.1 创建一个实例对象并调用实例方法
2.2 创建另一个实例对象:
2.3 添加实例属性
二、__init__(self)
1. __init__(self) 声明多个实例属性
2.__init__传参 改进
3 __init__总结
三、self
四、魔术方法:
__new__和__init__区别
其他魔术方法简单介绍
'''
面向对象编程:oop[object oriented programming] 是一种python编程思路
面向过程:就是我们一开始学习的,按照解决问题的步骤取写代码【根据业务逻辑去写代码】
在思考问题的时候,首先分析‘怎么按步骤去实现’,然后将问题解决拆解为若个个步骤,并将这些步骤对应成方法一部一部的最终完成功能【按步骤洗车】
面向对象:关注的是设计思维【找洗车店 给钱洗车】
从计算机角度来看:面向过程不适合做大项目,而面向对象适合做更大项目的设计
类和对象
类:类是具有一组 相同或相似特征【属性】和行为【方法】的一系列[多个]对象的集合
现实世界 计算机世界
行为----------------> 方法
特征----------------> 属性
对象:对象是实实在在的一个东西,类的实例化,具象化
类是对象的抽象化 而对象是类的一个实例
实例方法:在类的内部,用def 关键字定义 第一个参数默认是self【名字标识可以是其他的名字,但是这个位置必须被占用】
实例方法是归于类的实例所有
属性:定义在类内方法外的变量称为【类属性】
在方法内部定义的【通过使用类似于self.变量名】变量 称为实例属性
'''
一、定义类和对象
1.定义类
(类结构 类名 属性 方法)
class 类名:
属性
方法
class Person: # 类名一般用大驼峰命名法'''对应人的特征'''name='小明' #类属性age=20 '''对应人的行为'''def __init__(self): # __魔术方法__self.name1='小明1' # 实例属性passdef eat(self): #实例方法:归实例所有 # 第一个参数默认是self【名字标识可以是其他的名字,但是这个位置必须被占用】print('大口的吃饭')passdef run(self): #实例方法print('飞速的跑')passpass
注意第一个参数默认是self【名字标识可以是其他的名字,但是这个位置必须被占用】
2.创建一个对象
2.1 创建一个实例对象并调用实例方法
# 创建一个对象【类的实例化】
# 规则格式 对象=类名()
xm=Person()
xm.eat() #调用函数
xm.run()
print("{}的年龄是:{}".format(xm.name,xm.age)) #小明的年龄是:20
print("{}的年龄是:{}".format(xm.name1,xm.age)) #小明1的年龄是:20
运行结果:
2.2 创建另一个实例对象:
# 创建另一个实例对象
xw=Person() #创建出来的
xw.eat() #实例方法
2.3 添加实例属性
# 添加实例属性
xw.sex='男' # 添加实例属性 属于实例私有的属性
xw.pro='生物信息' # 添加实例属性 属于实例私有的属性
print(xw.sex)
运行结果:
# 如果有n个这样的对象被实例化 那么就需要添加很多次实例属性了 显然比较麻烦
# 引出 __init__(self)
二、__init__(self)
1. __init__(self) 声明多个实例属性
class People:def __init__(self): # 默认被调用 #__方法名__ 为内置魔术方法'''实例属性的声明和初始化'''self.name='小倩' # 实例属性初始化self.sex='女'self.age='18'passdef eat(self): # 实例属性'''吃的行为:return:'''print('喜欢吃猕猴挑')passpassxq=People() #此时xq已经拥有name,sex,age三种实例属性了
print(xq.name,xq.sex,xq.age)
xq.name='大倩'
xq.sex='女'
xq.age='19'
print(xq.name,xq.sex,xq.age)
运行结果:
2.__init__传参 改进
# __init__传参 改进
class People:def __init__(self,name,sex,age): # 默认被调用 #__方法名__ 为内置魔术方法'''实例属性的声明和初始化'''self.name=name # 实例属性初始化self.sex=sexself.age=agepassdef eat(self,food): # 实例方法'''吃的行为:return:'''print(self.name+'喜欢吃'+food)passpass
zhangheng=People('张衡','男',22)
print(zhangheng.name,zhangheng.age) # 张衡 22lh=People('李辉','男',18)
print(lh.name,lh.age) #李辉 18
lh.eat('苹果') #李辉喜欢吃苹果
zhangheng.eat('饺子') #张衡喜欢吃饺子
运行结果:
3 __init__总结
1.Python 自带的内置函数 具有特殊的函数 使用双下划线包起来的【魔术方法】
2.是一个初始化的方法,用来定义实例属性 和初始化数据的,在创建对象的时候自动调用 不用手动去调用
3.利用传参的机制可以让我们定义功能更加强大并且方便的 类
三、self
# self
class PersonB:'''定义类'''def getSelf(self): #python解释器会自动把这个实例对象作为第一个参数传递给selfprint('self=%s'%id(self))passdef eat(self,name,food):print('%s喜欢吃%s,职业是%s'%(name,food,self.pro))passdef __init__(self,pro):''':param pro: 专业'''self.pro=pro # 实例属性的定义pass# ld是一个新的实例化对象
ld=PersonB('生信')
ld.getSelf()
print('ld=%s'%id(ld)) # self与实例对象ld 内存地址相同
ld.eat('罗滴','水果') # 罗滴喜欢吃水果
运行结果:
python解释器会自动把实例对象作为第一个参数传递给self,可以通过后面两者内存地址相同可知,self即是ld这个实例对象的引用。
self总结:
self只有在定义 实例方法的时候才有意义,在调用不必传入相应参数,由解释器 自动去指向
self的名字是可以更改的 可以定义成其他的名字,只是约定俗成的定义成self
self 指的是 类实例对象本身,相当于java中的this关键字
四、魔术方法:
类似 __str__ __new__ 都是python内置的魔术方法
# 魔术方法
# __str__
# __new__
class People:def __init__(self,name,age,food): # 默认被调用 #__方法名__ 为内置魔术方法''':param name: 名字:param age: 年龄:param food: 食物'''self.name=name # 实例属性初始化self.age=ageself.food=food#测试print('-------------init执行---------')passdef __str__(self):'''打印对象 自定义对象内容格式的:return:'''return '%s今年%d喜欢吃%s'%(self.name,self.age,self.food)def __new__(cls, *args, **kwargs): # 不写会自动补一个new'''创建对象实例的方法 每调用一次 就会生成一个新的对象 cls 就是class的缩写场景: 可以控制创建对象的一些属性,经常用来做单例模式的时候来使用:param args::param kwargs:'''# 测试print('=============new执行==========')return object.__new__(cls) # 在这里是真正创建对象实例的pass
zhh=People('张衡',22,'汉堡')
print(zhh) # 张衡今年22喜欢吃汉堡 # 没有__str__会只输出地址 先new对象才能init
__new__和__init__区别
__new__ 类的实例化方法 必须要返回(return)该实例 否则对象就创建不成功
__init__ 用来做实例属性的初始化操作 也可以认为是实例的构造方法 接受类的实例 self 并对其进行构造
__new__ 至少有一个参数 是cls 代表要实例化的类, 此参数在实例化时由python解释器自动提供
__new__ 函数要先于__init__函数 执行
其他魔术方法简单介绍
__str__ 自定义对象内容格式的 打印对象 没有__str__会只输出地址 必须return
__class__ 查看对象所在的类
__del__ 析构方法 不写会自动补一个del
__mro__ 方法解析顺序
__call__将实例对象以函数的形式调用
2021小白Python学习记录Day7 面向对象基础(上) (定义类和对象、__init__传参、self、魔术方法)相关推荐
- Python OOP:面向对象基础,定义类,创建对象/实例,self,创建多个对象,添加对象属性,访问对象属性,__init__方法,带参数的__init__,__str__方法,__del__方法
一.理解面向对象 面向对象是⼀种抽象化的编程思想,很多编程语⾔中都有的⼀种思想. ⾯向对象就是将编程当成是⼀个事物,对外界来说,事物是直接使用的,不用去管他内部的情况.⽽编程就是设置事物能够做什么事. ...
- python怎么定义名称_python 之 面向对象基础(定义类、创建对象,名称空间)
第七章面向对象 1.面向过程编程核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问题流 ...
- python类的定义和使用_Python3基础之python 之 面向对象基础(定义类、创|python基础教程|python入门|python教程...
第七章面向对象 1.面向过程编程核心是"过程"二字,过程指的是解决问题的步骤,即先干什么再干什么基于该思想编写程序就好比在编写一条流水线,是一种机械式的思维方式 优点:复杂的问题流 ...
- python学习记录1(基础知识)
python是动态语言,使用变量时不需要定义类型,可以直接赋值 例如 a = 10 b = 'a' c = "hello world" 也不需要在结尾加上分号 # 输入 默认字符串 ...
- 蜗牛一步一步地往上爬的Python学习记录
Python学习记录 前言 简介 基础知识 类型变量 高级特性 函数式编程 高阶函数 偏函数 装饰器decorator 匿名函数 前言 第一,绝对不断更: 第二,绝对认真写: 第三,绝对撰写的公正漂亮 ...
- Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法
Day09新手小白学python 第九节 Python的类和对象的介绍,定义类和对象,定义实例方法和属性以及Python中的魔法方法 目录 Day09新手小白学python 前言 一.面向对象介绍 二 ...
- 个人python学习-Day7面向对象基础(上)
一.面向对象介绍 1.概述 面向过程:根据业务逻辑从上到下写代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象编程:将数据与函数绑定到一起,进行封装,这样能够更快速的 ...
- java预科基础篇2021.2.3学习记录
java预科基础篇2021.2.3学习记录 初识博客 本以为老师会讲是在微博上写博客做记录,没想到会是很多程序员专用的博客 博客为音译,正确翻译结果为网络日记,英文为bog 较为专业的程序员用博客为: ...
- 2021最新python学习视频教程
本文包含了千锋教育Python学习路线全阶段视频教程(从入门到精通),涵盖了你所需要掌握的所有前沿技术及知识点! 2021年全网最新,史上最全Python学习路线,从基础到项目实战应有尽有,牛批卡拉斯 ...
最新文章
- 吴恩达老师深度学习视频课笔记:构建机器学习项目(机器学习策略)(2)
- socket 非阻塞 linux,linux 非阻塞式socket编程求助。。
- Android中contentProvider的用途
- mysql金额数字转成中文_数字转换成汉字金额(转)
- python单例模式继承_Python四种实现单例模式的方法
- JDK8新特性(八)之Stream流的map()、sorted()、distinct()、match()方法
- Google登录提示错误码12501
- delphi7 调用XE编译的DLL遇到的坑
- 大数据量JSONObject.fromObject性能问题(大数据传给前台)
- [转]摄影入门导购-基于预算的器材解决方案
- 关于PLC控制伺服电机找原点
- js中0.1+0.2为什么不等于0.3
- GKCTF2020 逆向部分题的复现
- 我们为什么选择NEXTCHIP?为什么要选择ISP?为什么要选择AHD?为什么选择北京冠宇铭通?
- 天嵌TQ335X开发板学习-1
- 嵌入式系统中鲁棒性的理解
- Java处理文件上传 00 截断问题
- 不能bostype没有元数据异常_金蝶EAS_BOS工作笔记
- python多因子量化选股模型_【邢不行|量化小讲堂系列12-Python量化入门】法码三因子选股模型,有多少人可以跑赢...
- 微信转盘抽奖前端源码(三):移动端浏览器兼容性(12个奖品,指针开始时指向奖品)