zoukankan      html  css  js  c++  java
  • python 类属性及限制


    Student类本身需要绑定一个属性
    直接在class中定义属性,这种属性是类属性,归Student类所有:
    class Student(object):
    name = 'Student'
    类的所有实例都可以访问到类属性
    >>> s = Student() # 创建实例s
    >>> print(s.name)
    Student
    # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
    >>> s.name = 'Michael' # 给实例绑定name属性
    >>> print(s.name)
    Michael
    # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性

    相同名称的实例属性将屏蔽掉类属性

    给实例绑定一个方法
    >>> def set_age(self, age): # 定义一个函数作为实例方法
    ... self.age = age
    ...
    >>> from types import MethodType
    >>> s.set_age = MethodType(set_age, s) # 给实例绑定一个方法
    >>> s.set_age(25) # 调用实例方法
    >>> s.age # 测试结果
    25
    给一个实例绑定的方法,对另一个实例是不起作用的

    可以给class绑定方法:

    >>> def set_score(self, score):
    ... self.score = score
    ...
    >>> Student.set_score = set_score

    限制实例的属性
    使用__slots__
    只允许对Student实例添加name和age属性
    class Student(object):
    __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称

    >>> s = Student() # 创建新的实例
    >>> s.name = 'Michael' # 绑定属性'name'
    >>> s.age = 25 # 绑定属性'age'
    >>> s.score = 99 # 绑定属性'score'
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    AttributeError: 'Student' object has no attribute 'score'
    由于'score'没有被放到__slots__中,所以不能绑定score属性

    __slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的

    朝闻道
  • 相关阅读:
    1210 BBS admin后台管理及侧边栏筛选个人站点
    1209 BBS 登录
    更换 npm 源国内镜像 cnpm
    Linux软件管理
    apt-get / yum 软件安装源(国内)
    修改pip源为国内镜像源(加速下载)
    修改浏览器搜索引擎:网址应该如何填写
    如何根据实际问题选择一个合适的数学模型
    安装向量和矩阵运算库函数
    配置编译器(GCC和GFortran)
  • 原文地址:https://www.cnblogs.com/wander-clouds/p/8458115.html
Copyright © 2011-2022 走看看