zoukankan      html  css  js  c++  java
  • 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__
  • 相关阅读:
    初涉Android蓝牙开发
    android真机调试方法
    BizTalk Server 系列文章目录
    【译文】ExtJS 4.1性能预览
    【译】ExtJS 4.1会带来什么
    cocos2dx 如何使用Visual Studio 2010和xcode 4混合编写手机游戏
    Mac osx 下让android 模拟器横屏
    c++ int convert to std::string 转换成std::string
    离ExtJS 4.1 beta发布只剩26个bug了
    Window.ShowModalDialog使用详解
  • 原文地址:https://www.cnblogs.com/bolenzhang/p/7077977.html
Copyright © 2011-2022 走看看