python面向对象总结

一、面向对象的总结与梳理

1.1什么是面向对象、

                   面向对象是一种变成思想,是一个通过多个对象互相协作完成功能处理流程的编程思路,在核心处理过程中,又主要区分为类的声明定义、对象的创建使用、面向对象拥有的特征【三大特征:封装、继承、多态】

 

1.2什么是类和对象

         类:类型的简称,是数据类型的简称,是一种称呼、一个代码、一类事物的抽象出来的名称

对象:实体、物体

 

1.3类的声明语法和注意事项

         类的声明语法:

                   class 类名【注意:类名首字母大写】:     

                            “””注释”””

                            def __init__(self, name):      name属性形式参数  可以有多个形参

                                     self.name = name     类的属性

                            def 方法名(self):

                                     “””类的方法”””

1.4对象的创建语法和注意事项

对象的创建

         对象名 = 类名(类的各种属性实际参数)    # 实际参数一定要按顺序写 实际参数要与形式参数个数一样

1.5对象的操作属性

         对象名.name

1.6对象调用方法

         对象名.方法名()

1.7类和对象的区别

         类一个抽象的一种事物的总成

         对象是一个具体实际存在的物体

二、面向对象封装的意义

体现的是对隐私数据/敏感数据的保护,不允许外界直接访问当前对象的属性数据,而是要通过提供的访问方法进行访问,在方法中添加限制访问条件。

 

2.1封装的操作步骤

(1). 将全部属性私有化【使用两个下划线开头,描述该属性是私有的,外界不能直接访问】

    (2). 给每个属性,提供set/get访问方法

    (3). 在访问方法中,就可以添加访问限制,保护数据安全

 

2.2封装的注意事项

         封装后切记不要直接访问对象的属性

2.3封装后存在的问题和解决方案

误区1:什么样的属性应该封装?封装的话是不是一定要添加限制访问条件?

               (1) 为了让定义的数据类型,能使用不同的应用场景,一帮情况下我们要对当前类型的所有属性进行封装处理。

(2) 封装属性之后,会提供访问属性数据的set/get方法,开发过程中方法中不需要添加任何限制条件,只是预留了可以添加限制条件的方法而已,后期根据项目需求进行限制条件的完善

 

误区2:私有属性,完全不能直接访问

    我们定义了私有属性,就是两个下划线开头的属性

    理论上外界不能直接访问,而是要通过我们提供的set/get方法间接访问

   

    功能开发过程中,代码和功能都可能会存在一些问题

        如果发现问题~一定要及时沟通,而不是私自修改。

三、面向对象继承的意义

3.1继承的基本语法

class 类型名称(要继承的类型):

        pass

3.2继承的操作步骤

 

3.3继承中的方法重写什么意思?怎么操作?

子类中可以重新定义从父类中继承的方法【方法名称和方法参数一致】:方法重写

        方法重写:子类中重写父类中已经存在的方法

            在执行过程中~如果子类中重写了方法,执行子类的方法,如果没有重写则执行父类中的方法【运行过程中的多种状态切换:运行时多态】

 

3.4继承时从父类中默认继承了什么方法?

                   继承了父类的属性,和方法,私有方法不继承

3.5双下划线开头和结尾的方法:类型的魔法方法

__new__  创建对象的方法   一般不使用~直接通过父类创建对象即可。

    __init__ 初始化数据的方法  一般会重写该方法,用来初始化对象数据

 

    __slots__ 封装时,限制属性的

 

    __str__ 对象字符打印方式;默认情况打印内存中16进制表示的位置

    __repr__ 交互模式中,字符打印方式

 

    __hash__ 获取对象的hash数据,用于判断的依据

    __ne__ 不等于:not equals;两个对象使用!=判断的

    __ge__ 大于等于:grant or equals  判断 >=

    __gt__ 大于: grant than判断 >

    __le__ 小于等于:less or equals 判断 <=

    __lt__ 小于 less than 判断 <

    __eq__ 判断等于 equals 判断 ==

 

    __dict__ 将对象转换成字典

    __doc__ 说明文档

__class__ 类型,类似于type
3.6python中的多继承操作语法、

class 类名(类名1, 类名2, 类名3…)

3.7多继承的意义

一个对象在不同场景中,可能扮演不同的角色【设计时多态】

 

3.8多继承的方法查询顺序

python3中都是新式类:广度优先,从父类中查询对应的方法,查询到第一个满足的方法之后就直接返回

python2中的经典类:深度优先

四、总结两种多态的实现方式:

     4.1运行时多态

class Son:

    def xiao_shun(self):
        print("百善孝为先")


class Student:

    def xue_xi(self):
        print("好好学习,天天向上")


class Friend:

    def play(self):
        print("吃喝玩乐.....")


class Person(Son, Student, Friend):
    """人的类型:继承儿子、学生、朋友"""
    pass


p = Person()
# 家庭环境
if isinstance(p, Son):
    p.xiao_shun()

# 学习环境中
if isinstance(p, Student):
    p.xue_xi()

# 朋友
if isinstance(p, Friend):
    p.play()


def xue_tang(person):
    # 作为一个学员,在教室要好好学习
    if isinstance(person, Student):
        # person.play()
        person.xue_xi()


xue_tang(p)

4.2设计时多态

class Person:
	def __init__(self, name, age):
	    self.name  = name
	    self.age = age
	def play(self):
	    if self.age <= 18:
		print(“好好学习”)
	    elif 18 < self.age  <=60:
		print(“努力工作”)
	    else:
		print(“颐养天年”)

多态~和封装以及继承不同的是,没有固定的语法,没有固定的思路,只有操作的方式。

你可能感兴趣的:(python,面向对象)