python高级进阶_7_Python动态语言之紧箍咒(slots)03

本文探讨了Python中使用__slots__来限制类实例的属性添加,解释了其作用原理及适用范围,仅针对实例生效,不影响类和子类属性。通过示例代码展示了超出__slots__定义范围添加属性时的错误。

前面的讲解可以看出 ,方法和属性都可以为所欲为的添加,为了限制你的能力必须给你戴上紧箍咒。

这个紧箍咒是什么呢 slots, 它的作用就是给你个范围,你只能在这个范围蹦跶,超出了就枪毙, 强调下只是针对实例

注意下, 我说的只是实例,并没有说类,对子类也不起作用。

看以下代码

class Person():
    __slots__ = ("age", "name")
    def __init__(self,name,age):
        self.age=age
        self.name=name


def run(self):
    print("runing%s"%self.name)

p1=Person("laowang",90)
p1.age=16
p1.num=14
p1.name="xinxi"

报错如下:

    p1.num=14
AttributeError: 'Person' object has no attribute 'num'

我们添加方法试试 如下:

import types
p1.run=types.MethodType(run,p1)

p1.run()

报错如下:

    p1.run=types.MethodType(run,p1)
AttributeError: 'Person' object has no attribute 'run'

添加类 属性是不报错的, 如下:

class Person():
    __slots__ = ("age", "name")
    def __init__(self,name,age):
        self.age=age
        self.name=name


def run(self):
    print("runing%s"%self.name)

import types
p1=Person("laowang",90)

Person.sex="male"

print(p1.sex)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值