作为一个使用多年java多年的程序员来说,面向对象就像吃饭喝水一样熟悉。
看看逻辑细细品味。
把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。
但是说白了
封装就是你有什么不告诉别人,你的钱就自己悄悄的花,吃的悄悄的吃(隐私性)
继承就是你打在某一个领域学到的东西,一个专业培养出来的人才大部分能力是相同的,但是又各自有各自的不同,有的同学是学生会主席,赢取白富美,走上人生巅峰,有的依旧。。。(特化和异化)
多态 就是 龙生九子,...
#类
class 定义
#实例属性
实例属性一定要通过构造方法来声明,例如name 和age;
# 类属性
定义在类中且在方法体之外,类属性在所有实例化对象中是公用的,通过类名.类属性的方式调用、
# 私有属性:
java中的封装是基于 属性和方法私有化(private)来实现的,但是python中的私有属性是不同的:
双下划线__开头 外部不能通过'对象名.属性名'来访问或者更改 实际将其转化为了'_类名__属性名'
# 私有属性在类里面是正常使用 如果外部实在要修改私有属性 则需要预留一个方法修改私有属性
# 强制访问私有属性:实例对象名._类名__私有属性 但是不建议这样操作,不同版本的Python解释器可能会把'__私有属性名'改成不同的变量名,
# 通过'对象名.__私有属性名'直接修改私有属性,表面上看好像修改了其实并没有,因为Python解释器已经将对象内部的
# 属性名解释成'_类名__属性名' 如果在外边修改相当于另外申明了一个属性
get/set 方法
在java 中私有属性,一般情况下都会对应的拥有get/set方法用于为私有属性赋值和取值,在python 中同理,直接看代码。
可以这样写,但是作为一个优秀的Python 工程师,还得明白@property 装饰器 Python 官方提供了一个优秀的方式来给私有属性赋值,取值,删除。
请忽略name 的拼写错误
调用方法变成了属性赋值
#内置类属性
# 1、__dict__ 类的属性(包含一个字典,由类的属性名:值组成) 实例化对象.__dict__
# 2、__doc__ 类的文档字符串 类名或实例化对象名.__doc__
# 3、__name__ 类名 类名.__name__
# 4、__bases__ 类的所有父类构成元素(包含了由所有父类组成的元组)
# __name__ 如果在当前py文件运行则返回__main__ 如果是被引入作为模块在另外py文件运行则返回模块名
# 静态方法和类方法
# 静态方法:通过装饰器staticmethod修饰 不需要传递实例
# 静态方法只能访问类属性 不能访问实例属性
# 如何调用静态方法:1、实例对象.静态方法 2、类名.静态方法
# 类方法:通过装饰器classmethod修饰 需要传递一个cls类 cls也不是关键词
# 类方法也不能调用实例属性 也是只能调用类属性
# 如何调用类方法:1、实例对象.类方法 2、类名.类方法
上代码 瞧瞧
# 继承
#父类/子类,子类拥有父类的属性和方法,子类可以重写父类的方法,子类可以拥有的自己的属性和方法,有利于减少重复代码的书写。