【Python入门】day-15 初识类与对象③

目录

一、多态

二、私有变量

三、不可修改的类


一、多态

有了前面的铺垫,我们可以来介绍类的最后一个特点:多态。

多态指一个东西在不同的状态下有不同的属性,比如说,加法和乘法符号作用于数表示四则运算,作用于字符串则表示拼接和复制。通过下面的例子,我们能直观地感受多态的特点。

class Cat:
    def __init__(self, name):
        self.name = name


class Dog:
    def __init__(self, name):
        self.name = name


class Fish:
    def __init__(self, name):
        self.name = name


c = Cat("HuaHua")
d = Dog("DongDong")
f = Fish("YuYu")


def animal(x):
    print(x.name)


animal(c)
animal(d)
animal(f)

对于同一个函数,参数不同作用不同,这便是多态一种表现;在类中,每个实例对象都可以有不同的属性也是多态的一种表现。

二、私有变量

顾名思义,外部无法访问的变量,在类中存在,由变量前加两条下横线组成,定义如下:

class A:
    def __init__(self, x):
        self.__x = x


a = A(12)
print(a.__x)
print(a.__dict__)
# 结果报错,无法访问

但是,Python中没有绝对的私有变量,无法访问只是因为偷天换日了,我们来看一下dict:

class A:
    def __init__(self, x):
        self.__x = x


a = A(12)
print(a.__dict__)

 有意思了,__x其实被改名为了_A__x,我们来尝试一下访问_A__x:

class A:
    def __init__(self, x):
        self.__x = x


a = A(12)
print(a._A__x)
# 结果为12,访问成功

 其实,所谓的私有变量无法访问,本质是偷偷修改了变量名,变为了“_类名__变量名”

补充:有几条不成文的规矩,变量前加一条下横线表示这个变量不希望被访问,变量后加一条下横线表示这个变量与关键字重名,故加以区分。

三、不可修改的类

字典之所以速度快,是因为其牺牲空间来优化时间,故这种方法会占用资源。Python的灵活性在于其可以动态修改,这就用到了字典。

在类中,__dict__就是一个字典,如果类中的变量是固定的,不会增加,那么就不需要使用字典来动态修改,此时__dict__就造成了资源的浪费。

我们可以使用__slots__方法来固定变量,这时就不会生成__dict__,避免了资源浪费。

class A:
    __slots__ = ["x", "y"]
    # 指定类A中只有变量x和y

a = A()
a.x = 10
a.y = 10
print(a.x)
print(a.y)
# 结果为10、10

但是我们想给类A增加一个z变量,就会报错:

class A:
    __slots__ = ["x", "y"]
    # 指定类A中只有变量x和y

a = A()
a.z = 10
print(a.z)

class A:
    __slots__ = ["x", "y"]


a = A()
print(a.__dict__)

我们可以看到此时类A并没有创建__dict__。 

特别注意:父类的__slots__在子类中并不会生效,子类中可以创建z变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值