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

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM