【Python】—— 多态,类属性和类方法

目录

(一)面向对象三大特性

(二)多态 

2.1 了解多态

 2.2 体验多态

(三)类属性和实例属性 

3.1 类属性

3.1.1 设置和访问类属性

3.1.2 修改类属性

3.2 实例属性

(四)类方法和静态方法

4.1 类方法

4.1.1 类方法特点

4.1.2 类方法使用场景 

4.2 静态方法

4.2.1 静态方法特点

4.2.2 静态方法使用场景 


(一)面向对象三大特性

封装
  • 将属性和方法书写到类的⾥⾯的操作即为封装
  • 封装可以为属性和⽅法添加私有权限
继承
  • ⼦类默认继承⽗类的所有属性和方法
  • ⼦类可以重写⽗类属性和方法
多态
  • 传⼊不同的对象,产⽣不同的结果

(二)多态 

2.1 了解多态

多态指的是⼀类事物有多种形态,(⼀个抽象类有多个⼦类,因⽽多态的概念依赖于继承)。
  • 定义:多态是⼀种使⽤对象的⽅式,⼦类重写⽗类⽅法,调⽤不同⼦类对象的相同⽗类⽅法,可以产⽣不同的执⾏结果
  • 好处:调⽤灵活,有了多态,更容易编写出通⽤的代码,做出通⽤的编程,以适应需求的不断变化!
实现步骤:
  • 定义⽗类,并提供公共⽅法
  • 定义子类,并重写⽗类⽅法
  • 传递⼦类对象给调⽤者,可以看到不同⼦类执⾏效果不同

2.2 体验多态

class Dog(object):
    def work(self): # ⽗类提供统⼀的⽅法,哪怕是空⽅法
        print('指哪打哪...')

class ArmyDog(Dog): # 继承Dog类
    def work(self): # ⼦类重写⽗类同名⽅法
        print('追击敌⼈...')

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

class Person(object):
    def work_with_dog(self, dog): # 传⼊不同的对象,执⾏不同的代码,即不同的work函数
        dog.work()

ad = ArmyDog()
dd = DrugDog()

daqiu = Person()

daqiu.work_with_dog(ad)
daqiu.work_with_dog(dd)

(三)类属性和实例属性 

3.1 类属性

3.1.1 设置和访问类属性

  • 类属性就是 类对象 所拥有的属性,它被 该类的所有实例对象 所共有
  • 类属性可以使⽤ 类对象 实例对象 访问。
class Dog(object):
    tooth = 10

wangcai = Dog()
xiaohei = Dog()

print(Dog.tooth) # 10
print(wangcai.tooth) # 10
print(xiaohei.tooth) # 10

 类属性的优点

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

3.1.2 修改类属性

类属性只能通过类对象修改,不能通过实例对象修改,如果通过实例对象修改类属性,表示的是创建了⼀个实例属性。
class Dog(object):
    tooth = 10

wangcai = Dog()
xiaohei = Dog()

# 修改类属性
Dog.tooth = 12
print(Dog.tooth) # 12
print(wangcai.tooth) # 12
print(xiaohei.tooth) # 12

# 不能通过对象修改属性,如果这样操作,实则是创建了⼀个实例属性
wangcai.tooth = 20
print(Dog.tooth) # 12
print(wangcai.tooth) # 20
print(xiaohei.tooth) # 12

3.2 实例属性

class Dog(object):
    def __init__(self):
        self.age = 5

    def info_print(self):
        print(self.age)

wangcai = Dog()
print(wangcai.age) # 5

# print(Dog.age) # 报错:实例属性不能通过类访问
wangcai.info_print() # 5

(四)类方法和静态方法

4.1 类方法

4.1.1 类方法特点

  • 需要⽤装饰器 @classmethod 来标识其为类⽅法,对于类⽅法,第⼀个参数必须是类对象,⼀般以cls 作为第⼀个参数。

4.1.2 类方法使用场景 

  • 当⽅法中 需要使⽤类对象 (如访问私有类属性等)时,定义类⽅法
  • 类⽅法⼀般和类属性配合使⽤
class Dog(object):
    __tooth = 10

    @classmethod
    def get_tooth(cls):
        return cls.__tooth

wangcai = Dog()
result = wangcai.get_tooth()
print(result) # 10

4.2 静态方法

4.2.1 静态方法特点

  • 需要通过装饰器 @staticmethod 来进⾏修饰,静态⽅法既不需要传递类对象也不需要传递实例对象 (形参没有self/cls
  • 静态⽅法 也能够通过 实例对象 类对象 去访问。

4.2.2 静态方法使用场景 

  • 当⽅法中 既不需要使⽤实例对象(如实例对象,实例属性)也不需要使⽤类对象 (如类属性、类⽅法、创建实例等)时,定义静态⽅法
  • 取消不需要的参数传递,有利于 减少不必要的内存占⽤和性能消耗
class Dog(object):
    @staticmethod
    def info_print():
        print('这是⼀个狗类,⽤于创建狗实例....')

wangcai = Dog()
# 静态⽅法既可以使⽤对象访问⼜可以使⽤类访问
wangcai.info_print()
Dog.info_print()

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

起飞的风筝

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值