python 面向对象
类名的命名规则(符合大驼峰命名法)
如:CapWords,ShopCar…
每个代词的首字母大写,单词与单词之间没有下划线
面向对象的三大特性
- 封装,根据职责和功能将属性和方法封装到一个抽象的类中;
- 继承,实现代码的重用;
- 多态,定义时类型和运行时类型不一致;
多态性,不同的对象调用相同的方法,会产生不同的执行结果,增加代码的灵活度。
继承的语法
class 类名(父类名):
pass
调用父类方法
- super().父类方法名
- 父类名.方法(self) -->不推荐使用
新式类与旧式类(经典类)
- object 是python为所有对象提供的基类,提供有一些内置的属性和方法,可以用dir(object)查看。
- 新式类:以object为基类的类。 推荐使用
- 旧式(经典)类:不以object为基类的类。 不推荐使用
- 在python3.x 中定义类时,如果没有指定父类,会默认使用object作为该类的基类。
- 在python2.x 中定义类时,如果没有指定父类,则不会以object作为该类的基类。
- 为了保证代码在python2.x和python3.x上运行,在定义类时,如果没有父类,建议统一继承自object.
- 如:
class 类名(object):
pass
类中定义属性和方法的调用格式
调用格式 | |
---|---|
类属性 | 类名.属性 |
类方法(cls) | 类名.方法名 |
__init__定义 实例属性 | 定义对象时自动调用 |
实例方法 | 对象名.方法名() |
python中一切皆对象,其中类是一个特殊的对象。
class AAA():
pass
obj1 = AAA()
obj2 = AAA()
- 定义的类AAA属于类对象;
- obj1,obj2 属于实例对象。
- 在程序运行类会被加载到内存;
- 在程序运行时,类对象在内存只有一份,在使用类时可以创建很多个对象实例。
类中方法定义
- 类方法定义
- 方法内部只需要访问类属性,应该将该方法封装为类方法。
@classmethod
class 类方法名(cls):
pass
- 静态方法定义
- 在方法中不需要访问实例属性/类属性/调用实例方法/类方法,应该将该类方法封装成静态方法。
@staticmethod
class 静态方法名():
pass
- 实例方法定义
- 在方法内部既需要访问实例属性,又需要访问类属性,应该将该方法封装为实例方法
class 实例方法名(self):
pass
类中方法调用
- 调用静态方法,不需要创建对象,只需要通过类名.方法名调用静态方法;
- 调用类方法,使用类名.方法名();
- 调用实例方法,需要创建对象,通过对象名.方法名调用实例方法。