python学习笔记-多态

本文介绍了Python面向对象的三大特性:封装、继承和多态,详细讲解了多态的概念及其实现步骤。同时,讨论了类属性、实例属性的使用,以及类方法和静态方法的区别与应用场景。通过示例代码展示了如何在实际编程中应用这些概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python学习笔记-多态

面向对象三大特性

1. 封装:

将属性和方法写到类里面的操作即为封装
封装可以为属性和方法添加私有权限


2. 继承
子类默认继承父类所有的属性和方法
子类可以重写父类的属性和方法


3. 多态 传入不同的对象,产生不同的结果

多态

了解多态:

多态指的是一类事物有多种形态

定义: 多态是一种使用对象的方式,子类重写父类的方法 调用不同子类对象的相同父类方法,可以产生不同的执行效果

实现步骤:

1. 定义父类,并且提供公共方法
2. 定义子类,并且重写父类方法
3. 传递子类对象给调用者,可以看到不同子类执行效果不同
class Dog(object):

    #子类进行重写
    def work(self):
        pass



class ArmyDog(Dog):
    def work(self):
        print('追击敌人...')

class DrugDog(Dog):
    def work(self):
        print('追查毒品...')

class Person(object):
    def work_with_dog(self,dog):        #多态
        dog.work()


d1 = ArmyDog()
daqiu = Person()
daqiu.work_with_dog(d1)

类属性与实例属性

类属性:
类属性就是类对象所用的属性,它被该类的所有实例对象所共有
类属性可以使用类对象或者实例对象进行访问

	class Dog(object):
	    #设置类属性
	    tooth  = 10
	
	    #子类进行重写
	    def work(self):
	        pass
	
	
	
	class ArmyDog(Dog):
	    def work(self):
	        print('追击敌人...')
	
	class DrugDog(Dog):
	    def work(self):
	        print('追查毒品...')
	
	class Person(object):
	    def work_with_dog(self,dog):
	        dog.work()
	
	
	d1 = ArmyDog()
	daqiu = Person()
	daqiu.work_with_dog(d1)
	
	
	print(Dog.tooth)
	print(d1.tooth)

优点:记录某项数据始终保持一致时,则定义类属性,实例属性要求每一个对象为其单独开辟一份内存空间 来记录数据 而类属性为全类所共有,仅占用一份内存,更加节省内存空间

修改类属性:类属性只能通过类对象进行修改,不可以通过实例对象进行修改,如果通过实例对象进行修改类属性,表示的是创建了一个实例属性

类方法与静态方法

类方法: 需要用一个装饰器,@classmethod来表示其为类方法,对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数

使用场景:当方法中需要使用类对象(如访问私有类属性等),定义类方法,类方法一般和类属性配合使用

class Dog(object):
    #设置私有类属性
    __tooth = 10

    #子类进行重写
    def work(self):
        pass

    # 类方法  访问私有类属性
    def get_tooth(cls):
        return cls.__tooth



class ArmyDog(Dog):
    def work(self):
        print('追击敌人...')

class DrugDog(Dog):
    def work(self):
        print('追查毒品...')

class Person(object):
    def work_with_dog(self,dog):
        dog.work()



W = Dog()
result = W.get_tooth()
print(result)

静态方法

特点:需要通过装饰器@staticmethod来进行修饰,静态方法既不需要传递类对象也不需要传递实例对象(形参没有self/cls)

静态方法也可以通过实例对象和类对象去访问

静态方法使用场景
1. 当方法中既不需要实例对象(实例对象,实例属性),也不需要使用类对象(如类属性、类方法、创建实例),定义静态方法
2. 取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗

class Dog(object):
    #设置私有类属性
    __tooth = 10

    #子类进行重写
    def work(self):
        pass

    # 类方法  访问私有类属性
    @classmethod
    def get_tooth(cls):
        return cls.__tooth

    #静态方法不需要传递实例对象 也不需要传递类对象
    @staticmethod
    def info_print():
        print('这是一个狗类 用于创建狗的实例')



class ArmyDog(Dog):
    def work(self):
        print('追击敌人...')

class DrugDog(Dog):
    def work(self):
        print('追查毒品...')

class Person(object):
    def work_with_dog(self,dog):
        dog.work()



W = Dog()
result = W.get_tooth()
print(result)


W.info_print()
Dog.info_print()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少写代码少看论文多多睡觉

求打赏,求关注,求点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值