类的设计:
在程序开发中,要设计一个类,通常需要满足以下三要求
1.类名 这类事物的名字,满足大驼峰命名法
2.属性 这类事物具有什么样的特征
3.方法 这类事物具有什么样的行为
面向对象的基础语法:
定义简单的类:
class 类名:
def 方法1(self,参数列表):
pass
def 方法2 (self,参数列表):
当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:
对象变量 = 类名()
实例:
需求
小猫爱吃鱼,小猫要喝水
一.面向对象三大方法
1.初始化方法
我们现在已经知道了使用类名()
当使用类名()创建对象时,python的解释其会自动执行以下操作:
1.为对性在内存中分配空间--创建对象
2.调用初始化方法为对象的属性设置初始值--初始化方法
__init__ 方法是专门用来定义一个类具有哪些属性的方法
实例:
2.__del__方法
在python中
当使用类名()创建对象时,为对象分配空间后,自动调用__init__
当一个对象被从内存中销毁前,会自动调用__del__方法
实例:
3.__str__方法
在python中,使用pytjon输出对象变量,
在默认情况下,会输出这个变量引用的对象是由哪一个类创建的对象,以及在内存中
的地址(十六进制表示)
如果在开发中,希望使用print输出对象变量时,
能够打印自定义的额内容,就可以利用__str__这个内置方法了4
二.面向对象三大特征:
1.封装:根据职责将属性和方法封装到一个抽象的类中
2.继承: 实现代码的重用,相同的代码不需要重复的写
3.多态: 不同的对象调用相同的方法,产生不同的结果,
增加代码的灵活度
1.封装
1.封装是面向对象变成的一大特点
2. 面向对象变成的第一部 将属性和方法封装到一个抽象的类中
3. 外界使用类创建对象,然后让对象调用方法
4.对象方法的细节都被封装在类的内部
实例一:
实例二:
1.房子有户型,总面积和家具名称列表
新房子没有任何的家具
2.家具有名字和占地面积,其中
床:占地4平米
衣柜: 占地2平米
参作: 占地3平米
3.将以上三间家具添加到房中
4.打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表
2.继承:
实例一:
1.继承的传递性:
1,B类传承与A类,C类传承与B类
2,那么C类就具有B 类和A类所有的属性和方法
子类拥有父类以及父类的父类所有封装的属性和方法
实例二:
2.覆盖父类的方法
如果在开发中,父类的方法的实现和子类方法的实现,完全不同,就可以使用覆盖的方法
在子类中重新编写父类的方法
具体实现方式,就相当于在子类中定义了一个和父类同名的方法并且实现
重写之后,在运行时,只会调用子类的重写方法。而不会再调用父类封装的方法
3.多继承
多继承
子类拥有一个父类叫做单继承
子类可以拥有多个父类,并且具有多个父类的属性和方法
例如:孩子会继承自己父亲母亲的特性
语法:
class 子类名(父类名,父类名2...)
pass
3.多态
三.私有属性和私有方法
应用成精及定义方式
应用场景
在实际开发中,对象的属性或方法可能只希望自己能看
私有属性就是对象不希望公开的属性
私有方法就是对象不希望公开的方法
定义方法
在定义属性或方法时,在属性名或者方法前增加“__”
实例一:
实例二之父类私有方法属性1:
1.子类对象不能在自己的方法内部,直接访问父类的私有属性和私有方法
2.子类对象可以通过父类的共有方法简介访问到私有属性或私有方法
私有属性,私有方法是对象的隐私,不对外公开,外界以及子类都不能直接访问
私有属性,私有方法常做一些内部的事情
四.类的结构
实例:
1.使用面向对象开发,第一部是设计类
2.使用雷鸣()创建对象,创建对象的动作有两步
1.在内存中对象分配空间
2.调用初始化方法__init__为对象初始化
3.对象创建后,内存中就有一个对象的实实在在的存在--实例
因此:
1.创建出来的对象叫做类的实例
2.创建对象的动作叫做实例化
3.对象的属性叫做实例属性
4.对象调用的方法叫做实例方法
在程序执行时:
1.对象各自拥有自己的实例属性
2.调用对象的方法,可以通过self
父嗯文自己的属性
调用自己的方法
结论:
1.每一个对象都有自己独立的内存空间,保存各自不同的额属性
2。多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用传递到方法内部
1.类结构:
是一个特殊的对象
python中一切皆对象
class AAA: 定义的类属性属于类对象
obj1 = AAA: 属于实例对象
在运行程序时,类同样会被加载到内存
在python中,类是一个特殊的对象--类对象
除了封装 实例(对象)的属性和方法外,类对象还可以有自己的属性和方法
通过类名. 的方式可以直接访问类的属性或者调用类的方法
2.类属性
类属性就是针对类对象定义的属性
使用赋值语句在class关键字下方可以定义类属性
类属性用于记录于这个类相关的特征
类方法就是针对类对象定义的额方法
在类方法内部就可以直接访问类属性或者调用其他方法
语法如下
@classmethod
def 类方法(cls):
pass
静态方法
在开发时,如果需要在类中封装一个方法,这个方法:
既不需要访问实例属性或者调用实例方法
也不需要访问类属性或者调用类方法
这个时候可以把这个方法封装成一个静态方法
他语法如下:
@staticmethod
def 静态方法():
pass
静态方法需要修饰器@staticmethod来标识,告诉解释器这是一个静态方法
通过类名,调用静态方法
综合应用:
案例小结:
1.实例方法:方法内部需要访问实例属性
2.类方法:方法内部只需要访问类属性
3.静态方法:方法内部不需要访问实例属性
提问:如果方法内部,既需要访问实例属性,有需要访问类属性,应该用什么方法?
答: 应该用定义实例方法
"""
设计模式:
使用类名()创建对象时候,python的解释器首先会调用__new__方法作为对象分配空间
__new__是一个由object基类提供的额内之的静态方法,主要有两个作用:
在内存中为对象分配空间
返回对象的引用
python的解释器获得额对象的引用后,将引用作为第一个参数,传递给__init__方法
# __new__: 负责给对象分配空间 __init__(初始化方法)负责给对象初始化