面向对象编程(二)

本文详细介绍了Python面向对象编程中的核心概念,包括类的初始化、动态和静态方法、继承以及数据和方法的查找顺序。通过实例展示了如何创建和调用对象的方法,如何使用`@classmethod`和`@staticmethod`装饰器,以及如何利用继承减少代码冗余和提高复用性。同时,探讨了继承的本质和查找顺序,帮助理解面向对象编程的内在逻辑。
摘要由CSDN通过智能技术生成

对象的独有功能

class Person:
    type = '人类'    # 公共数据

    def __init__(self,name):
        self.name = name    # 添加对象独有的数据

    def eat(self):
        print('%s吃饭中'%self.name)     
# 是多个对象公共的方法也算多个对象独有的方法  对象来调用就会将对象当做第一个参数传入

    def sleep(self):
        print('%s睡觉中'%self.name)

p1 = Person('aa')
p1.eat()
p1.sleep()

ps:如果在全局中则不是独有的如果在类中则是公共的,python解释器在定义类中的函数默认是绑定给对象的(相当于对象独有的方法)。

动静态方法

1.什么是动态和静态

        动态就是绑定给对象的方法直接在类体代码中编写即可,对象调用会自动将对象当做第一个参数传入,类调用则有几个形参就传几个实参;静态方法就是普普通通的函数。

2.代码展示

class Person:
    type = '动物'

    def Monkey(self):    # 给对象绑定数据,self用于接收对象
        print('一只猴子',self)
    
    @classmethod        # 给类绑定方法,cls用于接收类
    def duck(cls):
        print('一只小黄鸭',cls)

    @staticmethod        # 被@staticmethod修饰的方法,就是静态方法
    def chicken(a,b):    # 按照普通函数传参方式
        print('一只火鸡')

stu1 = Person()
Person.duck() # 类调用会自动将类当做第一个参数传入
stu1.duck() # 对象调用会自动将产生该对象的类当做第一个参数传入

Person.chicken(1,2)

面向对象三大特征之继承

1.面向对象三大特性

                继承        封装        多态

2.继承的含义

        继承就是让类继承了另一个类转变为父子关系,子类可以直接访问(调用)父类的静态属性和方法。在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类。

3.继承的目的

        1.可以减少代码编写

        2.减少代码冗余

        3.提高重复使用率

4.继承的操作

class 类名(父类名):
    pass

\bullet  定义类的时候类名后面加括号

\bullet  括号内填写你需要继承的类名

\bullet  括号内可以填写多个父类用逗号隔开

# 2. 定义父类
class Father():
    name = "I'm Daddy"

# 2. 定义子类,并让子类继承父类Father
class Son(Father):
   pass

# 3. 创建子类对象,并调用其继承到的属性和方法
obj = Son()
print(obj.name)

继承的本质

1.抽象:

        把多个类公共的数据或功能拿出来形成一个基类

2.继承:

        从上往下获取每个基类里的资源

3.对象:

        数据和功能的结合体

4.类:

        多个对象相同的数据和功能的结合体

5.父类:

        多个类相同的数据和功能的结合体

数据和方法的查找顺序

1.没有继承父类的情况下名字查找顺序:

        对象自身 >>> 类

class Son():
   name = 'first'

obj = Son()
print(obj.name) 
# 对象自身没有 到产生的类中查找
'''打印结果
first
'''

2.单继承的情况下名字查找顺序:

        对象自身 >>> 类 >>>继承的父类

class Father():
    name = "I'm Daddy"

class Son(Father):
   # name = 'first'
    pass
obj = Son()
print(obj.name)
# 当类中也没有并且有父类的时候去父类找
'''打印结果
I'm Daddy
'''

3.多继承的情况下名字查找顺序:

顺序: A >>> B  C >>> D

 ps:非菱形继承深度优先(每个分支都走到底 再切换)

 

顺序:A >>> B  C >>> D >>> E

ps:菱形继承广度优先(前面几个分支都不会走最后一个类 最后一个分支才会走)

###当实在搞不清的时候可以用类点mro()方法查看该类产生的对象名字的查找顺序###

 经典类与新式类

1.python2解释器

        在python2中有经典类和新式类,可以继承object或其子类的类也可以什么都不继承

2.python3解释器

        在python3中所有的类默认都会继承object,只有新式类。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值