1 Star 0 Fork 3

tonyklose1984 / LearningPython

forked from celaraze / learning-python 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
24.使用__slots__.py 904 Bytes
一键复制 编辑 原始数据 按行查看 历史
绯末 提交于 2019-12-31 08:34 . 增加使用slots
# 定义一个类
from types import MethodType
class Student(object):
pass
# 实例化类,绑定属性name
s = Student()
s.name = 'Tom'
print(s.name)
# 给实例绑定函数
# 但是这个函数只能用于这个实例,不能用于同类的其它实例
def set_name(self, name):
self.name = name
s.set_name = MethodType(set_name, s)
s.set_name('Tina')
print(s.name)
# 解决这个问题,可以使用给类绑定函数
def set_age(self, age):
self.age = age
Student.set_age = set_age
s.set_age(18)
print(s.age)
# 使用__slots__限制实例的属性,比如我们只允许对类添加name和age属性
class Teacher(object):
__slots__ = ('name', 'age')
t = Teacher()
t.name = 'Tom'
t.age = 18
print(t.name)
print(t.age)
# 下面不在__slots__里面的属性就会报错
# t.gender = 'male'
# TODO __slots__只对当前类的实例起作用,对继承的子类不起作用
Python
1
https://gitee.com/tonyklose1984/LearningPython.git
git@gitee.com:tonyklose1984/LearningPython.git
tonyklose1984
LearningPython
LearningPython
master

搜索帮助