美文网首页
Python 练习-面向对象高级编程-01(__slots__)

Python 练习-面向对象高级编程-01(__slots__)

作者: 庭阶 | 来源:发表于2019-01-09 11:23 被阅读0次

1.slots

1.1.动态绑定属性或方法

class Student(object):
    pass
s=Student()
s.name='Michael'#动态给实例绑定一个属性
print(s.name)

def set_age(self,age):
    self.age=age

from types import MethodType#MethodType方法在Types模块里,要先import才能使用
s.set_age=MethodType(set_age,s)#给实例动态绑定一个方法
s.set_age(25)#调用实例方法
print(s.age)#测试结果

s2=Student()
#给s 实例绑定的方法,对另一个实例s2 不起作用的
try:
    s2.set_age(36)
except AttributeError as e:
    print('AttributeError',e)

        
#为了给所有实例都绑定方法,可以给class 绑定方法:
def set_score(self,score):
    self.score=score


Student.set_score=set_score#给class Student 绑定方法

#给class 绑定的方法,所有实例均可调用
s.set_score(99)
print(s.score)

s2.set_score(88)
print(s2.score)

1.2.slots:限制class 实例能添加的属性

slots定义的属性仅对当前类实例起作用,对继承的子类是不起作用的;
如果在子类也定义slots,则子类中的可允许添加属性=子类的slots和父类的slots

class Student(object):
    __slots__=('name','age')#用tuple定义允许实例绑定的属性名称

s=Student()
s.name='Michael'#动态给实例绑定一个属性name
s.age=25##动态给实例绑定一个属性age
print(s.name,s.age)

#由于score 没有放在__slots__中,所以不能动态绑定score 属性,会报错
try:
    s.score=99
except AttributeError as e:
    print('AttributeError',e)

    
# __slots__进对当前类实例起作用,对继承的子类不起作用
# 在子类中动态绑定score 是可以的
class GraduatesStudent(Student):
    pass
g=GraduatesStudent()
g.score=88
print(g.score)
    

#子类也定义__slots__,则子类中的可允许添加属性=子类的__slots__和父类的__slots__
class SubStudent(Student):
    __slots__=('gender')

sub=SubStudent()
sub.gender='male'
sub.name='TOM'
sub.age=33
print(sub.name,sub.age,sub.gender)

相关文章

  • Python 练习-面向对象高级编程-01(__slots__)

    1.slots 1.1.动态绑定属性或方法 1.2.slots:限制class 实例能添加的属性 slots定义的...

  • 动手理解Python的引用、赋值、拷贝

    Python是一门面向对象的高级编程语言,相较于其他面向对象的编程语言,Python在面向对象的路上走得更远,即,...

  • Python3学习日记 Day-4

    NOTE:文章中的代码缩进不知道怎么搞,直接粘贴使用会报错 学习地址 面向对象高级编程 使用 __slots__ ...

  • Python从入门到精通

    Python语法的三个阶段 Python基础语法函数是编程 Python进阶语法面向对象编程 Python高级语法...

  • 廖雪峰python3 教程

    观其大纲 1 python基础 2 函数 3 高级特性 4 函数式编程 5 模块 6 面向对象编程 7 面向对象高...

  • 面对对象高级编程

    面向对象高级编程: 面向对象编程:封装、继承和多态 面向对象高级编程:多重继承、定制类和元类

  • Python 面向对象编程

    Python 面向对象编程(一) Python 面向对象编程(一) 虽然Python是解释性语言,但是它是面向对象...

  • python 面向对象高级编程之使用__slots__

    python学习笔记,特做记录,分享给大家,希望对大家有所帮助。 使用slots 正常情况下,当我们定义了一个cl...

  • 无标题文章

    Python 非常易学,强大的编程语言。Python 包括高效高级的数据结构,提供简单且高效的面向对象编程。 所谓...

  • python面向对象学习笔记-01

    学习笔记 # 0,OOP-Python面向对象 - Python的面向对象 - 面向对象编程 - 基础 -...

网友评论

      本文标题:Python 练习-面向对象高级编程-01(__slots__)

      本文链接:https://www.haomeiwen.com/subject/oopbrqtx.html