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:在编写程序的时候,千万不要对实例属性和类属性使用相同的名字,因为相同名称的实例属性将屏蔽掉类属性,但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性。
  • 相关阅读:
    PHP线程安全
    Oracle中MD5+Base64加密实现
    1002. A+B for Polynomials (25)
    1001. A+B Format (20)
    Rails,uva 514
    Database,Uva1592
    Hello World for U
    D3.js 力导向图
    从零开始CSS(一 2016/9/21)
    从零开始HTML(三 2016/9/20)
  • 原文地址:https://www.cnblogs.com/yunche/p/8891341.html
Copyright © 2011-2022 走看看