Python 面向对象三大特征

一、 面向对象三大特征--封装
面向对象的程序设计中,某个类把所需要的数据(也可以说是类的属性)和对数据的操作(也可以说是类的行为)全部都封装在类中,分别称为类的成员变量和方法(或成员函数)。这种把成员变量和成员函数封装在一起的编程特性称为封装。
公有成员变量和私有成员变量:Python中,以两个下划线‘__’开头的变量都是私有成员变量,而其余的变量都属于公有成员变量。私有的成员变量只能在类的内部访问,而共有的公有的成员变量可以在类的外部进行访问。
公有方法和私有方法:公有的成员方法和私有的成员方法也是通过名字来区分的,双下划线‘__’开头的方法是私有成员方法。类的私有方法只能通过对象名(在类内部也就是self)在类的内部进行访问。而公有方法可以在类的外部通过对象名进行访问。
创建对象后,Python解释器默认调用__init__()方法。当删除一个对象时,Python解释器也会默认调用一个方法,这个方法为__del__()方法。
def __del__(self):
1、python解释器执行完整个代码之后会默认最后调用对象的__del__()
2、如果有多个对象,有几个对象,python解释器执行完毕的时候就是调用几遍__del__()
3、如果手动删除时(del)删除完成就会执行__del__(),当使用del 把内存的所有应用删除,立刻调用__del__方法
del xxx 不会主动调用__del__方法,只有引用计数==0时,__del__()才会被执行,并且定义了__del_()的实例无法被Python的循环垃圾收集器收集,所以尽量不要自定义__del__()。一般情况下,__del__() 不会破坏垃圾处理器。
二、面向对象三大特征--继承
子类在继承的时候,在定义类时,小括号()中为父类的名字父类的属性、方法,会被继承给子类私有属性(私有类属性)和私有方法不被继承。
私有的属性,不能通过对象直接访问,但是可以通过方法访问
私有的方法,不能通过对象直接访问
私有的属性、方法,不会被子类继承,也不能被访问
Python中是可以多继承的父类中的方法、属性,子类会继承.
类名.__mro__方法的作用打印多重继承的继承方法顺序
 重写父类方法
所谓重写,就是子类中,有一个和父类相同名字的方法,在子类中的方法会覆盖掉父类中同名的方法
1、super调用父类属性super并不是一个函数,是一个类名.。Super().方法名,可以调用父类的方法(不用传参,作用是调用父类的方法,传的是子类实例的值)supper是类名。也可以用父类的类名直接调用:类名.方法名(self)
2、通过父类名.属性方法名调用
三、面向对象三大特征--多态
所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态。多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承)。
四  面向对象四大特征--抽象(可以不算)
数据抽象 -->表示世界中一类事物的特征,就是对象的属性.比如鸟有翅膀,羽毛等(类的属性)
过程抽象 -->表示世界中一类事物的行为,就是对象的行为.比如鸟会飞,会叫(类的方法)
类属性、实例属性
在前面的例子中我们接触到的就是实例属性(对象属性),类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有
class Person(object):
    name = 'Tom'  #公有的类属性
    __age = 12     #私有的类属性
如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。
类方法和静态方法
Python中对象有两种:经典对象和新型对象。经典对象就是不继承object父类定义出来的对象。新型对象就是要继承object类定义出的对象。新型对象和经典对象最大的区别就是,新型对象中提供了对类方法和静态方法的支持。
类方法就是被classmethod()函数处理过的函数,能够直接通过类名进行调用,也能够被对象直接调用。
静态方法相当于类层面的全局函数,可以被类直接调用,可以被所有实例化对象共享,通过staticmethod()定义静态方法,静态方法没有self参数。
1. 类方法:
要用修饰器@classmethod来标识其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数,能够通过实例对象和类对象去访问。类方法还有一个用途就是可以对类属性进行修改:
 cls 当前类的对象    类模型也是占用内存空间的   2. 类对象产生的时候还没有类模型创建的对象,所以类方法中是不能使用对象属性
2. 静态方法
从Python2.4后需要通过修饰器@staticmethod来进行修饰,静态方法不需要多定义参数可以不加self或者cls,当调用的方法和类对象和实例对象没有关系的时候就可以用静态方法.
1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数;
2)从第1条,静态方法是无法访问实例变量的,而类成员方法(类方法)也同样无法访问实例变量,但可以访问类变量;
3)静态方法中可以使用类属性,要想使用对象属性则必须要传参,通过参数对象调用
 4. 如果静态方法的参数是self的话,与类的普通方法中的self,表示的意思是不一样的。
而实例方法的第一个参数是实例对象self,那么通过self引用的可能是类属性、也有可能是实例属性(这个需要具体分析),不过在存在相同名称的类属性和实例属性的情况下, 实例属性优先级更高。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值