一、定义
类:抽象的,对象共有的特征。
对象:有很多个。具体的存在。
python里面定义类(属性 + 功能): class 类名
python里面造对象:实例化
二、命名
大驼峰 命名
class 类名(大驼峰命名):
属性
方法(功能/行为)
三、实例化类 —— 创建对应的对象
1、创建对象的语法:
对象名 = 类名(参数) # init函数有参传参,没参不用传。
2、可以创建多个对象。
3、每个对象都是独立的。每个对象都拥有类里的所有方法。
4、每个对象的属性、方法调用:
对象名.方法()
对象名.属性
2、方法名
对象名.方法名()
self:
代表对象本身。
# 实例化对象的时候,当前实例化对象是谁,self就是谁。
# 在定义类的时候,并不知道对象是谁。用self来表示对象。
#每个对象都是独立的,对象与对象之间,没有任何关系。每个对象,都是调用自己的。
3、动态类属性,初始化函数
definit (self,参数)
self.属性 = 值(可以是函数传进来的参数/其他函数调用。。。)
self.属性 = 值 # 给对象添加一个属性,并赋值
魔法 - 在创建对象的同时,自动调用,做初始化的动作,Java里面叫构造函数
4、实例属性
实例属性(只有对象可以访问):self.XXX(类定义中) 或者 对象.XXX
类属性(类和实例都可以访问):类名.XX
四、问题:
1、在类方法的参数,可以是其他类的实例对象吗?(不在int函数中的属性)
不建议。动态添加的属性,只有在调用此方法之后才会有。其它情况下如何去引用就会报错。
五、私有化
1、私有化:我想藏起来,不给外面的人看见/访问/修改
2、python面向对象 - 私有化:
1)、属性/方法 约定俗成。
通过对象名.属性/方法实际上是可以访问的。
但是它的意思就是,别访问我,我是私有化。全靠自觉
2)、属性/方法 深度私有。
通过对象名.属性/方法访问不到。访问会报错
只有类内部可以访问。
3、模块是否支持私有化
和_私有化方式同样在模块(.py)当中也支持。
模块内私有,仅想在模块内使用,其它模块导的时候,表示这些不想被外部访问。
4、什么场景下使用私有化
— 什么情况下定义的属性或者函数不需要被外部使用?当模块/类要实现一个大功能,而这个功能由很多个内部的小功能(函数不应该太复杂)组成的。但是这些小功能对于使用者而言不需要看见/不需要使用。我们就会做成私有化。
六、静态方法
普通函数 - 没有必定要传的参数-类或者对象。只不过呢,它是放在类里面。 <br />@staticmethod <br /> def 函数名称(): 函数实现
实例方法?实例方法之间互调用?
— 不要,会”死锁”
七、继承
1、私有化——不可继承
属性/方法: 子类可以继承
属性/方法: 子类不可以继承
2、继承的语法class 子类(父类1, 父类2…): pass 子类继承父类,拥有父类所有属性和方法,除了私有化的以外。
3、继承就会面临2个问题:
1)你想在父类的功能或者属性以外,添加属于你自己特色的方法/属性。
2)子类和父类有同名方法 - 子类重写父类方法
你想在父类原有功能的基础上,去优化它/改变它。 即,你和父类和同名方法:
2.1 不动的父类的功能,只是增加一些额外的功能。
2.2 推翻父类的功能,重新写一遍。 在与父类同名方法的内,想调用父类的同名方法,使用super
4、方法重载:java语言有。python没有。 方法重载处理的场景:
1)参数个数不一样
2)参数类型不一样
子类有的用自己的,子类没有就会使用父类的。