Python面向对象编程主要知识

'''尚学堂学习打卡记录,用于复习'''

面向对象(OOP):

1.针对大型软件设计而来,使得程序扩展性更强,可读性更好。

2.通过将数据和操作的相关方法封装到对象中,组织代码和数据的方式更加接近人的思维,大大提高了编程效率

3.python完全支持面向对象的基本功能:继承,多态,封装等

4.python中一切皆对象

5.python支持面向过程,面向对象,函数式编程等多种编程范式

6.面向过程编程更加关注程序的逻辑流程,适合编写小规模程序,面向对象更关注软件中对象之间的关系,适合编写大规模程序

7.面向对象帮助我们从宏观上把握,从整体上分析整个系统,具体到实现部分的微观操作,仍需要面向过程的思路去处理

8.面向过程和面向对象是相辅相成的,面向对象离不开面向过程

定义一个类:

class Student: #类名一般首字母大写,多单词采用驼峰原则

def __init__(self, name, score): #self必须位于第一个参数

self.name = name

self.score = score

def say_score(self):

print('{0}的分数是:{1}'.format(self.name, self.score))

s1 = Student('tz', 18)

s1.say_socore()

s1.age = 32 #给类对象s1的新增age属性并引用对象32

__init__()方法:初始化创建好的对象,初始化指给实例属性赋值

__new__()方法:用于创建对象,一般无需重定义该方法

要点:
1.定义实例方法时,第一个参数必须为self,self指当前的实例对象

2.调用实例方法时,不需要给self传参,解释器自动传参

其他操作

1.dir(obj) 可以获得对象的所有属性方法

2.obj.__dict__ 获取对象的属性字典

3.pass 空语句

4.isinstance(对象,类型) 判断对象是不是指定类型

类方法:类方法是从属于类对象的方法

        @classmethod

        def 类方法名(cls [, 形参列表]):
                函数体

要点如下

1.@classmethod 必须位于方法上面一行

2.第一个cls必须有,cls指的就是类对象本身

3.调用类方法的格式:类名.类方法名(参数列表),参数列表中,不需要也不能给cls传值

4.类方法中访问实例属性和实例方法会导致错误

5.子类继承父类的方法是,传入cls是子类对象,而非父类对象

 __del__()方法(析构函数)和垃圾回收机制:

        __del__方法称为析构方法,用于实现对象被销毁时所需要的操作,比如:释放对象占用的资源,python实现自动的垃圾回收,当对象的引用计数为0时,由垃圾回收器调用__del__方法,我们也可以通过del语句删除对象,从而保证调用__del__方法,系统会自动提供__del__方法,一般不需要自定义析构方法

__call__()方法:定义了__call__方法的对象,称为可调用对象,即对象可以像函数一样被调用

 python中的方法没有重载

方法的动态性:Python时动态语言,我们可以动态的为类添加新的方法,后者动态地修改类已有地方法。

Python地私有成员和私有方法:通过__属性名(方法名)来规定私有地属性(方法),类外部不能直接访问,通过_类名__私有属性(方法)来访问私有属性(方法)

@property装饰器:

被@property装饰的方法用于获取属性值,被装饰的方法名用作属性名

@属性名.setter装饰的方法是设置属性值的方法

@属性名.deleter装饰的方法是删除属性值的方法

面向对象的三大特征:

1.封装:隐藏对象的属性和实现细节,只对外提供必要的方法

2.继承:让子类具有父类的特性,提高代码的重用性

3.多态:同一个方法由于对象不同产生不同的行为

语法格式:Python支持多重继承,一个子类可以继承多个父类

        class 子类类名(类名1[,父类2,...]):

                类体

如果在类定义中没有指定父类,则默认父类是object类,也就是说object是所有类的父类,里面定义了一些所有类共有的默认实现,比如:__new__()

定义子类时,必须在其构造函数中调用父类的构造函数,格式为:父类名.__init__(self,参数列表)

类成员的继承和重写
1.成员继承:子类继承父类除构造方法之外的所有成员

2.方法重写:子类可以重新定义父类中的方法,这样就会覆盖父类的方法,也称为重写

通过类的方法mro()或者类属性__mro__可以输出这个类的继承结构层次:

class A:pass

class B(A):pass

class C(B):pass

print(C.mro())

Python支持多继承,如果父类中有相同名字的方法,在子类没有指定父类名时,解释器按照从左向右按顺序搜索

MRO(Method Resolution Order):方法解析顺序,我们通过mro()方法获得类的层次结构,方法解析顺序也是按照这个类的层次结构寻找的

在子类中,如果想要获得父类的方法时,我们可以通过super()来调用,super()代表父类的定义,不是父类的对象:

class A:

        def say(self):
                print("A:", self)

class B(A):

        def say(self):
                #A.say(self)

                super().say()

                print("B:", self)

B().say()

由于Python中一切皆对象,+ - * / 等运算都是通过方法实现的,可以通过重载这些方法实现一些操作:

对象常见的特殊属性

对象的赋值,浅拷贝,深拷贝

组合和继承的关系

继承:实现子类拥有父类的方法和属性

组合:让一个类成为另一个类的属性,实现一个类拥有另一个类的方法和属性

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值