Python入门-面向对象.继承.封装.多态

作为一个使用多年java多年的程序员来说,面向对象就像吃饭喝水一样熟悉。

看看逻辑细细品味。

把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。


但是说白了  

封装就是你有什么不告诉别人,你的钱就自己悄悄的花,吃的悄悄的吃(隐私性)

继承就是你打在某一个领域学到的东西,一个专业培养出来的人才大部分能力是相同的,但是又各自有各自的不同,有的同学是学生会主席,赢取白富美,走上人生巅峰,有的依旧。。。(特化和异化)

多态 就是 龙生九子,...

#类

class  定义

定义 实例化对象 并调用方法

#实例属性

实例属性一定要通过构造方法来声明,例如name 和age;

# 类属性

定义在类中且在方法体之外,类属性在所有实例化对象中是公用的,通过类名.类属性的方式调用、

# 私有属性:

java中的封装是基于 属性和方法私有化(private)来实现的,但是python中的私有属性是不同的:

双下划线__开头 外部不能通过'对象名.属性名'来访问或者更改 实际将其转化为了'_类名__属性名'

# 私有属性在类里面是正常使用 如果外部实在要修改私有属性 则需要预留一个方法修改私有属性

# 强制访问私有属性:实例对象名._类名__私有属性 但是不建议这样操作,不同版本的Python解释器可能会把'__私有属性名'改成不同的变量名,

# 通过'对象名.__私有属性名'直接修改私有属性,表面上看好像修改了其实并没有,因为Python解释器已经将对象内部的

# 属性名解释成'_类名__属性名' 如果在外边修改相当于另外申明了一个属性


可以修改私有属性,但你要为你的行为负责

get/set 方法

在java 中私有属性,一般情况下都会对应的拥有get/set方法用于为私有属性赋值和取值,在python 中同理,直接看代码。


类似于java 中的get/set 方法

可以这样写,但是作为一个优秀的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、类名.类方法

上代码     瞧瞧


静态方法和类方法

# 继承

#父类/子类,子类拥有父类的属性和方法,子类可以重写父类的方法,子类可以拥有的自己的属性和方法,有利于减少重复代码的书写。


继承


子类通过重写方法,使各个子类各不相同,提高了代码的扩展性

你可能感兴趣的:(Python入门-面向对象.继承.封装.多态)