zoukankan      html  css  js  c++  java
  • Python中类属性和self属性的区别

    今天学习目标,理解类属性和实例属性 

    测试代码如下

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*
    
    '2016-11-26class测试用例'
    
    __author__ = 'CivLcf'
    
    
    class Student(object):
       name ='ddd'
    
    
    class StudentNew(object):
         def __init__(self, name):
             self.name = name
    
    s = Student()
    s1 = StudentNew('s1')
    
    if print(hasattr(s, 'name')):
        print('s.name true')
    else:
        print('s.name false')
    
    if hasattr(Student, 'name'):
        print('Student.name true')
    else:
        print('Student.name false')
    
    if print(hasattr(s1, 'name')):
        print('s1.name true')
    else:
        print('s1.name false')
    
    if hasattr(StudentNew, 'name'):
        print('StudentNew.name true')
    else:
        print('StudentNew.name false')
    
    #删除属性
    del s.name
    del s1.name
    
    if print(hasattr(s, 'name')):
        print('s.name true')
    else:
        print('s.name false')
    
    if hasattr(Student, 'name'):
        print('Student.name true')
    else:
        print('Student.name false')
    
    if print(hasattr(s1, 'name')):
        print('s1.name true')
    else:
        print('s1.name false')
    
    if hasattr(StudentNew, 'name'):
        print('StudentNew.name true')
    else:
        print('StudentNew.name false')

    运行结果:

    s.name true
    Student.name true
    s1.name true
    StudentNew.name false
    s.name true
    Student.name true
    s1.name false
    StudentNew.name false
    

     

    由以上测试可以看出   self.name 中的属性是实例属性   

    上面代码会抛一个异常, 在删除s.name属性的时候,由于student中name属性属于类属性,所以无法直接通过删除实例属性来进行删除

    总结:

    实例的属性可以覆盖类属性  

    self.XXX是实例属性

    以后代码中不要出现实例属性与类属性同名的问题,否则会引起结果不对

    mark 2019-11-26

     

  • 相关阅读:
    第一阶段冲刺02
    梦断代码阅读笔记01
    第一阶段冲刺01
    第十周总结报告
    单词统计
    用户模板分析
    第九周总结
    第九周课后作业
    py_11_ 0726
    Day_01
  • 原文地址:https://www.cnblogs.com/CityLcf/p/11933342.html
Copyright © 2011-2022 走看看