OOP面向对象上
介绍
Python——万物皆对象
面向过程——根据业务逻辑自上而下写代码
函数式——功能代码封装到函数中
OOP——将数据与函数绑定到一起,进行封装
类和对象
类Class——具有一组相同或相似属性和方法的移类对象的组合
对象——类的实例化
Class构成:
- 类名
- 类属性——数据
- 类方法——行为
类和对象
实例方法——在类的内部,用def关键字来定义,第一个参数为self【名字表示可以是其他名字,但位置必须被占用】
实例方法归类的实例所有
类属性——在类的内部定义的属性
实例属性——定义在方法内部定义,使用self引用的属性
def __init__(self):
self.name='deer' #实例属性
pass
#定义类和对象
class Person:
#对应人的特征
#name='Deer' #类属性
age=22 #类属性
#对应人的行为
def __init__(self):
self.name='deer' #实例属性
pass
#实例方法
def eat(self):
print('吃饭了')
pass
def run(self):
print('跑')
pass
#创建对象 对象名=类名()
deer = Person()
#调用方法
deer.eat()
print('{}的年龄是{}'.format(deer.name,deer.age))
__ init __方法
- python内置函数 具有特殊函数
- __ __称为魔术方法
- 初始化方法,用来定义实例属性和初始化数据,创建对象是自动调用
- 利用传参机制是定义功能更加方便
class People:
def __init__(self,name,age):
'''
实例属性声明,初始化操作,构造函数
'''
self.name=name #实例属性
self.age=age
pass
def eat(self,food):
'''
吃的行为
:return:
'''
print(self.name+'吃'+food)
pass
pass
#每次都要添加
deer=People()
deer.name='Deer' #添加实例属性
deer.age=22 #添加实例属性
print(deer.age)
bob=People()
bob.name='Bob' #添加实例属性
bob.age=20 #添加实例属性
print(bob.age)
nb=People()
print(nb.name) #直接输出实例属性默认值
nb.name='qwe' #可以修改实例属性
print(nb.name)
#__init__改进
zxc=People('zxc',18)
print(zxc.name,zxc.age)
zxc.eat('banana')
asd=People('asd',22)
print(asd.name,asd.age)
asd.eat('apple')
self
self和对象指向同一个地址
特点:
- self只有在类中定义实例方法的时候才有意义,调用是不用传入相应参数,而使由解释器自动指向
- self的名字可以更改
- self值得是类实例对象本身,相当于Java中this
class Person:
def __init__(self,pro):
'''
:param pre: 专业
'''
self.pro=pro #实例属性
pass
'''
定义类
'''
def eat(self,name,food):
'''
实例方法
:return:
'''
print('%s喜欢吃%s 专业是%s' % (name,food,self.pro))
pass
pass
xw=Person('computer') #__init__传参
print('xw=%s'%id(xw))
xw.eat('小王','apple')
魔术方法
魔术方法—— __ xxxx __
class Person:
'''
定义类
'''
def __init__(self, pro, name, food):
'''
:param pre: 专业
:param name: 姓名
:param food: 食物
'''
self.pro = pro # 实例属性
self.name = name
self.food = food
print('--------init---------')
pass
def eat(self, name, food):
'''
实例方法
:return:
'''
print('%s喜欢吃%s 专业是%s' % (name, food, self.pro))
pass
# __str__
def __str__(self): # 打印对象信息
'''
打印对象 自定义对象 是内容格式
:return:
'''
return '%s喜欢吃%s 专业是%s' % (self.name, self.food, self.pro)
# 创建对象
def __new__(cls, *args, **kwargs):
'''
创建对象实例的方法 每调用依次 创建一个新的对象class——cls
场景:可以控制船舰对象的一些属性设置 常用来做单例模式的时候来使用
:param args:
:param kwargs:
'''
print('---------new-----')
return object.__new__(cls) # 返回对象 创建对象的实例
pass
pass
xw = Person('computer', '小王', 'banana')
print(xw)