__slots__函数的使用

__slots__函数的使用

部分内容来自网络:
添加链接描述

1.用法及意义:我们知道python是动态语言:可以在运行的过程中,修改代码。比如给对象增加属性,给类增加方法等操作。但是如果任意添加或者修改而没有约束的话,对程序的健壮性和安全都没有保障。 实际开发中,给实例添加属性进行约束的话,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性。

2.对于Python是动态语言的实例解释,比如类Person在定义时绑定的只有name,age,属性,但是在运行时我们可以给他的实例对象增加新的属性,例如:p1._country = ‘China’ ,print(p1._country),结果为:China;所以我们认为Python为动态语言,而但我们在Person定义中绑定属性之前使用了 __slots__函数时,例如:slots = (‘name’,‘age’) ,则 实例对象p1就只能够绑定name和age属性,不能够增加其他属性,否则会发生Error;

3.但是对于用__slots__函数限定的Person类,其他子类却是不受限定的,则其子类Student可以添加其他的属性。

4.代码示例:

class Person(object):
 
    def __init__(self,name,age):
        self.name = name
        self.age = age
 
    #注意这里__slots__函数中的参数用“”包裹
    __slots__ = ("name", "age")
 
class Student(Person):
    def __init__(self,name,sex,age):
        super().__init__(name,age)
        self.sex = sex
 
p1 = Person("tom",18)
p1.sex = "male" #AttributeError: 'Person' object has no attribute 'sex',添加不了别的属性
 
stu1 = Student("jack","male",22)
print(stu1.name,stu1.sex,stu1.age)
stu1.country= "china"
print(stu1.country)  #虽然父类设置__slots__属性约束,但是对子类没有约束力。

python中的内建(内嵌)属性是系统自带的,用户不用导入包就可以直接使用的属性。如何查看python中所有的内建属性(内嵌) 呢? 很简单,内建属性既然到处都可以使用,肯定属于全局变量,使用globals()查看所有全局变量,可以看到有一个__builtins__的属性,使用__dict__即可查看。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值