zoukankan      html  css  js  c++  java
  • Python之实例属性和类属性

    参考原文

      廖雪峰Python

    实例属性和类属性

      在前面已经说过由于Python是动态语言,可以根据类的实例绑定任何的属性。

      给实例绑定属性的方法是通过实例变量,或者self变量绑定的:

    class Student(object):
        def __init__(self, name):
            self.name = name
    
    s = Student('Bob')
    s.score = 90

      那怎么给一个类本身绑定属性呢?方法是直接在class中定义的属性就是类属性,如:

    class Student(object):
        name = 'Student'

       这样一来所有类的实例都可以访问到,name属性既指实例的name属性又指类的name属性,当两者同时存在时,实例属性会屏蔽掉类属性:

    >>> class Student(object):
    ...     name = 'Student'
    ...
    >>> s = Student() # 创建实例s
    >>> print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
    Student
    >>> print(Student.name) # 打印类的name属性
    Student
    >>> s.name = 'Michael' # 给实例绑定name属性
    >>> print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
    Michael
    >>> print(Student.name) # 但是类属性并未消失,用Student.name仍然可以访问
    Student
    >>> del s.name # 如果删除实例的name属性
    >>> print(s.name) # 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了
    Student
    Tips:在编写程序的时候,千万不要对实例属性和类属性使用相同的名字,因为相同名称的实例属性将屏蔽掉类属性,但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性。
  • 相关阅读:
    Spring源码剖析4:懒加载的单例Bean获取过程分析
    css3动画 9步
    删除文件
    监听变量的方法
    jPaginate应用
    bg-render+bg-class+filter
    css兼容处理
    系统前端关键点
    token 入门教程
    svg笔记----------path篇
  • 原文地址:https://www.cnblogs.com/yunche/p/8891341.html
Copyright © 2011-2022 走看看