无名 发表于 2022-5-8 17:33:49

【冷漠】【考核】Python——面向对象(封装,继承,多态)


Python面向对象(封装,继承,多态)
一 ,封装
1. 封装的意义:
①将属性和方法放到一起做为一个整体,然后通过实例化对象来处理;

②隐藏内部实现细节,只需要和对象及其属性和方法交互就可以了;

③对类的属性和方法增加 访问权限控制。

2.私有权限(在属性名和方法名前面加上两个__):
①类的私有属性 和 私有方法,都不能通过对象直接访问,但是可以在本类内部访问;

②类的私有属性 和 私有方法,都不会被子类继承,子类也无法访问;(private)

③私有属性 和 私有方法 往往用来处理类的内部事情,不通过对象处理,起到安全作用。http://cdn.u1.huluxia.com/g4/M03/97/61/rBAAdl796lGAZHhuAAJnpAkVctk069.png
总结

Python中没有像C++中 public 和 private 这些关键字来区别公有属性和私有属性。

Python是以属性命名方式来区分,如果在属性和方法名前面加了2个下划线’__’,则表明该属性和方法是私有权限,否则为公有权限。

4,修改私有属性的方法(通常2种)

对象名.属性名 = 数据 ----> 直接修改`(类里使用)
对象名.方法名() ----> 间接修改
私有属性不能直接访问,所以无法通过第一种方式修改,一般的通过第二种方式修改私有属性的值:定义一个可以调用的公有方法,在这个公有方法内访问修改。http://cdn.u1.huluxia.com/g4/M03/97/61/rBAAdl796lKAWDlWAAS94Cu6D74284.png
二,多态
1,定义
所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态 ,多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”

鸭子类型:虽然我想要一只"鸭子",但是你给了我一只鸟。 但是只要这只鸟走路像鸭子,叫起来像鸭子,游泳也像鸭子,我就认为这是鸭子。

Python的多态,就是弱化类型,重点在于对象参数是否有指定的属性和方法,如果有就认定合适,而不关心对象的类型是否正确。http://cdn.u1.huluxia.com/g4/M03/97/61/rBAAdl796lKAba6EAAKoGJnDz_g529.png
通俗点理解:定义obj这个变量是说的类型是:F1的类型,但是在真正调用Func函数时给其传递的不一定是F1类的实例对象,有可能是其子类的实例对象。

这种情况就是所谓的多态:

1.多态:不同的子类对象,调用相同的父类方法,产生不同的结果`
2.继承
3.重写http://cdn.u1.huluxia.com/g4/M03/97/61/rBAAdl796lOAHiseAAHS0CNUzzg154.png
2,多态性的好处
1.增加了程序的灵活性

以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)

2.增加了程序额可扩展性

通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用

三.类属性和实例属性
类属性和实例属性**

在前面的例子中我们接触到的就是实例属性(对象属性),顾名思义,类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似。(static)

对于公有的类属性,在类外可以通过类对象和实例对象访问http://cdn.u1.huluxia.com/g4/M03/97/61/rBAAdl796lSAL-6ZAAFw62BfPNw545.png
实例属性(对象属性)http://cdn.u1.huluxia.com/g4/M03/97/61/rBAAdl796lSAH-7YAAFFMp1pnsw278.png
通过实例(对象)去修改类属性http://cdn.u1.huluxia.com/g4/M03/97/61/rBAAdl796lWAU-DoAAFFIiJzigc384.png
总结
①如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。
②如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用该名称的属性,实例属性会强制屏蔽掉类属性,即引用的是实例属性,除非删除了该实例属性。

四.静态方法和类方法
1,类方法:
是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法
对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数(当然可以用其他名称的变量作为其第一个参数,但是大部分人都习惯以’cls’作为第一个参数的名字,就最好用’cls’了),能够通过实例对象和类对象去访问。http://cdn.u1.huluxia.com/g4/M03/97/61/rBAAdl796lWAcGQeAAEcRHhUvks591.png
类方法还有一个用途就是可以对类属性进行修改:http://cdn.u1.huluxia.com/g4/M03/97/61/rBAAdl796laALH1pAAHNnhLitiw102.png
页: [1]
查看完整版本: 【冷漠】【考核】Python——面向对象(封装,继承,多态)