面向对象编程oop
面向对象:按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的方法。
面向对象编程:是一种解决软件复用的设计和编程方法。这种方法把软件系统中相近相似的操作逻辑和操作、应用数据、状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。
类和对象
类:是具有一组 相同或相似属性和行为的一系列对象的集合。
对象:类的实例化,具象化。
类是对象 的抽象化,对象是类的一个实例。
定义类和对象
类结构:类名采用大驼峰
class 类名:
属性
方法
对象格式:
对象名=类名()
class Person:
name='' #类属性
age=12
def eat(self): #实例方法
self.name='吃饭' #实例属性
print('kkkkkk')
pass
pass
# 创建一个对象
xm=Person()
xm.eat() #调用函数
实例方法和属性
在类的内部,使用def关键字可以定义一个实例方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数。
类属性:在类的内部定义的变量。
实例属性:定义在方法里面使用self引用的属性。
_init__方法
class People:
def __init__(self): #初始化方法,实例化对象的时候自动调用,完成一些初始化设置
'''
实例属性的声明
'''
self.name='kk'
self.age=12
self.sex='女'
pass
def eat(self):
'''
吃的行为
'''
print('吃吃吃吃吃吃吃吃吃吃')
pass
pass
xx=People()
xx.name='信息' #添加实例属性
xx.age=12 #添加实例属性
xx.eat()
init 传递参数:
class People:
def __init__(self,name,age,sex):
'''
实例属性的声明
'''
self.name=name
self.age=age
self.sex=sex
pass
pass
ad=People('aa',12,'女')
- Python自带的内置函数,具有特殊的函数,使用双下划线 包起来的
- 是一个初始化的方法,用来定义实例属性和初始化数据的,在创建对象的时候自动调用,
- 利用传参机制可以让我们定义功能更加强大并且方便
self和对象指向同一个内存地址,可以认为self就是对象的引用。
self特点:
- 只有在类中定义,实例方法的时候采用意义,在调用时候不必传入相应的参数,自动指向
- self的名字是可以更改的,可以定义成其他名字,只是约定俗成的定义为 self
- self 指的是 类实例对象本身,相当于java中的this
魔法方法
在Python中,有一些内置好的特定的方法,方法名“__xxx__
",在进行特定的操作时会自动被调用。
常见的魔法方法:
__init__
:初始化一个类,在创建实例对象为其赋值时使用。
__str__
:在将对象转换成字符串str(对象)测试的时候,打印对象的信息。
__new__
:创建并返回一个实例对象,调用一次,就会得到一个对象。
__class__
:获得已知对象的类
__del__
:对象在程序运行结束后进行对象销毁的时候调用这个方法,来释放资源。
class People:
def __init__(self,name,age,sex): #
'''
实例属性的声明
'''
self.name=name
self.age=age
self.sex=sex
pass
def __str__(self):
'''
打印对象
'''
return '%s , %d 岁, %s'%(self.name,self.age,self.sex)
pass
def __new__(cls,*args,**kwargs):
'''
创建对象实例的方法,每调用一次,就会生成一个新的对象
场景:可以控制创建对象的一些属性限定,经常用来做单例模式的时候来使用
'''
return object.__new__(cls) #在这里真正创建对象实例
pass
pass
xx=People('xx',12,'女')
print(xx)
__new__
和__init__
函数的区别:
__new__
:类的实例化方法,必须要返回该实例,否则对象创建不成功。至少有一个参数是cls代表要实例化的类,此参数在实例化时由Python解释器自动提供。比__init__
函数先执行。
__init__
:用来做数据属性的初始化工作,也可以认为是实例的构造方法,接受类的实例self并对其进行构造。