首页 > 代码库 > Python学习之__slots__属性

Python学习之__slots__属性

在廖老师的网站上学习的__slots__属性
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2017/5/14 17:16
# @Author  : Aries
# @Site    : 
# @File    : 使用_slots_.py
# @Software: PyCharm

from types import MethodType
#
# class Student(object):
#     pass
# s=Student()
# s.name="zb"
# print(s.name)
# def setAge(self,age):
#     self.age=age
# s.setAge=MethodType(setAge,s)##这里给实例绑定方法的做法值得关注,这就是动态语言的魅力,给某个实例添加某个方法,但是
# #却对其他的实例没有影响
# ss=Student()
# print(hasattr(ss,"setAge"))
# print(hasattr(s,"setAge"))
# Student.setAge=setAge#给Student类绑定方法,这样使得每个Student类的实例都有setAge方法
# print(hasattr(ss,"setAge"))
# print(hasattr(s,"setAge"))


‘‘‘
以上是对实例和类绑定相应的方法,但是,如果我们想要对类的属性进行限制的时候,就要用到_slots_属性了。
如下
‘‘‘
class Student (object):
    __slots__=("name","age","sex")
    pass
s=Student()
s.name="zs"
s.age=44
s.sex="F"
class graduate(Student):
    pass
g=graduate()
g.sex="M"
g.age=10
g.name="ls"
g.score=55#注意,这里的score属性并没有在父类的__slots__属性中,但是,在子类中还是可以添加绑定的,也就是说,__slots__属性是不继承的


Python学习之__slots__属性