【python】进阶之面向对象(三)

一、多态

在面向对象中表述多态:
向不同的对象发送同一条信息,不同的对象在接收之后会产生不同的行为.
也就是说,每个对象可以用自己的方式去响应共同的信息(调用函数).不同的行为指不同的实现(函数执行的效果).
# 多态指一类事物有多种形态
import abc
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def talk(self):
        pass
 
 
class Person(Animal):
    def talk(self):
        print('hello')
 
 
class Dog(Animal):
    def talk(self):
        print('陌上')
 
 
class Cat(Animal):
    def talk(self):
        print('许叶彤')

二、封装

隐藏对象的属性和实现细节,仅提供对外公开访问的方式
私有变量和私有方法
在python中用双下划线开头的方式将属性隐藏起来,就设置了私有的.
其实这仅仅是一种变形操作,类中的所有双下划线开头的名字__x都会自动变形成_类名__x的形式.

这种变形的特点:
1.类中定义的__x只能在内部使用
2.这种变形是针对外部的变形,在外部无法直接通过__x这个名字访问到
3.在子类定义的__x不会覆盖父类中的__x.子类中:_子类名__x,父类中:_父类名__x.
class A:
    __n = 0
 
    def __init__(self):
        self.__x = 10  # 变形成了self._A__x
 
    def __func(self):
        print('A')
 
    def test(self):
        print(self.__x)  # 只有在类内部才可以直接通过名字访问到
        self.__func()
 
# a = A()
# a.test()
# print(a._A__x)  # 在外部访问需要发生变形
 
 
 
 
# 在继承中,父类不想子类覆盖自己的方法,可以讲方法定义为私有的
class B:
    def __func(self):  # _B__func
        print('B')
 
    def test(self):
        self.__func()  # self._B__func()
 
 
class C(B):
    def __func(self):  # _C__func()
        print('C')
 
 
c = C()
c.test()

三、property属性

property装饰的函数,访问会自动执行然后得到返回值
property属性实际上实现了获取,修改和删除三种方法.
# bmi
# bmi = 体重(kg)/身高(m)**2
class Person:
    def __init__(self, name, weight, height):
        self.name = name
        self.weight = weight  # 体重
        self.height = height  # 身高
 
    @property
    def bmi(self):
        return self.weight/self.height**2
 
 
# p = Person('tony', 46, 1.7)
# print(p.bmi)
 
 
class FOO:
    def __init__(self, value):
        self.__name = value
 
    @property
    def name(self):
        return self.__name
 
    @name.setter
    def name(self, value):
        # isinstance(值, 数据类型):判断值是否是某个数据类型
        if not isinstance(value, str):
            # raise:抛出异常
            # TypeError:类型错误
            raise TypeError('value必须是字符串')
        self.__name = value
 
    @name.deleter
    def name(self):
        # 删除的时候干的事情
        print('不能删除')
 
 
f = FOO('tony')
print(f.name)  # 执行获取操作会自动执行property函数
f.name = 'wuluo'  # 执行赋值操作会自动执行setter函数
print(f.name)
del f.name  # 执行删除操作会自动执行deleter函数

关于Python的知识今天就到这里啦,后续我会为大家讲解更多非常有用的知识哦~
关注我,带你领略Python的风采~😍😍😍

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陌上~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值