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

 

猜你喜欢

转载自www.cnblogs.com/CityLcf/p/11933342.html