- 1.面向对象
- 1.1定义
- 1.2类和对象
- 1.3定义类和创建对象、实例方法和属性、init方法
- 1.4 init方法
- 1.5 self理解
- 1.6 魔术方法
1.面向对象 1.1定义
- 面向对象编程:oop [object oriented programming] 是一种python的编程思路;
- 面向过程:就是我们一开始学习的,按照解决问题的步骤去写代码 【根据业务逻辑去写代码】,在思考问题的时候, 首先分析’怎么按照步骤去实现’ 然后将问题解决拆解成若干个步骤,并将这些步骤对应成方法一步一步的 最终完成功能。
- 面向对象:关注的是设计思维【找洗车店 给钱洗车】
类和对象 类:类是具有一组 相同或者相似特征【属性】和行为【方法】的一系列[多个]对象组合 现实世界 计算机世界 行为---------> 方法 特征---------->属性 对象: 对象是实实在在的一个东西,类的实例化,具象化 类是对象的抽象化 而对象是类的一个实例1.3定义类和创建对象、实例方法和属性、init方法
实例方法:在类的内部,使用def 关键字来定义 第一个参数默认是 self 【名字标识可以是其他的名字,但是这个位置必须被占用】 实例方法是归于 类的实例所有 属性:类属性 实例属性 在类的内部定义的变量【类属性】 在方法内部定义的【通过类似于self.变量名】 变量,是实例属性
# 定义类和对象
# 类结构 类名 属性 方法
# class 类名:
# 属性
# 方法
class Person:
'''
对应人的特征
'''
# name='小明' #类属性
age=20 #类属性
'''
对应人的行为 实例方法
'''
def __init__(self):
self.name='小明' #实例属性
pass
def eat(parms):
print("大口的吃饭")
pass
def run(self): #实例方法
print('飞快的跑')
pass
pass
def printInfo():
'''
普通方法
:return:
'''
pass
# 创建一个对象【类的实例化】
# 规则格式 对象名=类名()
xm=Person()
xm.eat() #调用函数
xm.run()
print("{}的年龄是:{}".format(xm.name,xm.age))
# 创建另外一个实例对象
xw=Person()
xw.eat() #实例方法
1.4 init方法
# init传递参数 改进
class Pepole:
def __init__(self,name,sex,age):
'''
实例属性的声明
'''
self.name=name
self.sex=sex
self.age=age
pass
def eat(self,food):
'''
吃的行为
:return:
'''
print(self.name+'喜欢吃'+food)
pass
zp=Pepole('张鹏','男生',18)
print(zp.name,zp.age)
zp.eat('香蕉')
lh=Pepole('李辉','男生',28)
lh.eat('苹果')
print(lh.name,lh.age)
xh=Pepole('小花','女生',20)
xh.eat('橘子')
print(xh.name,xh.age)
# 总结 __init__
# 1. python 自带的内置函数 具有特殊的函数 使用双下划线 包起来的【魔术方法】
# 2. 是一个初始化的方法 用来定义实例属性 和初始化数据的,在创建对象的时候自动调用 不用手动去调用
# 3. 利用传参的机制可以让我们定义功能更加强大并且方便的 类
1.5 self理解
小结 self特点 self只有在类中定义 实例方法的时候才有意义,在调用时候不必传入相应的参数 而是由解释器 自动去指向; self的名字是可以更改的 可以定义成其他的名字,只是约定俗成的定义成了 self self 指的是 类实例对象本身, 相当于java中 this
class Person:
def __init__(self,pro,name,food):
'''
:param pro: 专业
:param name: 姓名
:param food: 食物
'''
self.pro=pro #实例属性的定义
self.name=name
self.food=food
print('----init-----函数执行')
pass
'''
定义类
'''
def eat(self,name,food):
'''
实例方法
:return:
'''
# print('self=%s',id(self))
print('%s 喜欢吃 %s 修的专业是:%s'%(self.name,self.food,self.pro))
pass
pass
# xw是一个新的实例化对象
xw=Person('心理学','小王','榴莲')
# print('xw=%s',id(xw))
# xw.eat('小王','榴莲')
print(xw) #直接输出对象
1.6 魔术方法
- 定义:
class Person:
def __init__(self,pro,name,food):
'''
:param pro: 专业
:param name: 姓名
:param food: 食物
'''
self.pro=pro #实例属性的定义
self.name=name
self.food=food
print('----init-----函数执行')
pass
'''
定义类
'''
def eat(self,name,food):
'''
实例方法
:return:
'''
# print('self=%s',id(self))
print('%s 喜欢吃 %s 修的专业是:%s'%(self.name,self.food,self.pro))
pass
def __str__(self):
'''
打印对象 自定义对象 是内容格式的
:return:
'''
return '%s 喜欢吃 %s 修的专业是:%s'%(self.name,self.food,self.pro)
pass
def __new__(cls, *args, **kwargs):
'''
创建对象实例的方法 每调用一次 就会生成一个新的对象 cls 就是class的缩写
场景:可以控制创建对象的一些属性限定 经常用来做单例模式的时候来使用
:param args:
:param kwargs:
'''
print('----new-----函数的执行')
return object.__new__(cls) #在这里是真正创建对象实例的
pass
pass
# xw是一个新的实例化对象
xw=Person('心理学','小王','榴莲')
# print('xw=%s',id(xw))
# xw.eat('小王','榴莲')
print(xw) #直接输出对象
# 小结 self特点
# self只有在类中定义 实例方法的时候才有意义,在调用时候不必传入相应的参数 而是由解释器 自动去指向
# self的名字是可以更改的 可以定义成其他的名字,只是约定俗成的定义成了 self
# self 指的是 类实例对象本身, 相当于java中 this
# __new__和__init___函数的区别
# __new__ 类的实例化方法 必须要返回该实例 否则对象就创建不成功
# __init___ 用来做数据属性的初始化工作 也可以认为是实例的构造方法 接受类的实例 self 并对其进行构造
# __new__ 至少有一个参数是 cls 代表要实例化的类 ,此参数在实例化时由python解释器自动提供
# __new__ 函数 执行要早于 __init___ 函数



