Python面向对象高级编程:__slot__(给实例添加方法、属性)

纲要:

本章总的来说是给实例添加属性,给类添加方法两个主题,以及相应的作用范围。总结如下:

1.给实例添加属性(作用范围:当然是只对当前实例有效);

2.用__slots__限制可以给实例添加的属性(作用范围:__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的,除非在子类中也定义__slots__);

3.用types模块中的MethodType方法给实例添加方法;(作用范围:给“实例…”当然是限制于本实例);

4.给类添加方法;(作用范围:对所有实例生效)


以下是代码部分,逻辑较乱,但是都是上述四点的证据:

  1 #!/usr/bin/env python
  2 # -*- coding:utf-8 -*-
  3 class Student(object):
  4     __slots__ = ('name','age')#限制给类添加的属性
  5 def set_score(self,score):
  6     self.score = score
  7 s = Student()
  8 from types import MethodType
  9 s.set_setscore = MethodType(set_score,s)#给实例添加方法
 10 s.set_setscore(100)
 11 print(s.score)
 12 s.name = 'bolen'
 13 s.age = 18
 14 s.tt = 'test' #限制属性里只有name和score,所以此次会报错"has no attribute..."
 15 print(s.name,s.age,s.tt)
 16 s2 = Student()  #给一个实例添加方法,对另一个实例是不起作用的
 17 Student.set_score = set_score #为了给所有实例都添加方法,可以给类添加方法。
 18 
 19 #使用__slots__要注意,__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的:
 20  class GraduateStudent(Student):
 21     pass
 22 
 23 g = GraduateStudent()
 24 g.tt = 9999
 25 #除非在子类中也定义__slots__,这样,子类实例允许定义的属性就是自身的__slots__加上父类的__slots__。
Python3中的__slots__

转载于:https://www.cnblogs.com/bolenzhang/p/7077977.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值