Python類的內置函數


Python在創建類的時候,不單單只產生了自己定義的屬性,在 內部還自動生成了一些屬性。

1、__dict__:這是一個用來記錄類屬性的字典。我們在調用函數的屬性時,本質上就是在屬性字典里直接查找。當一個類被實例化之后,實例本身只有數據屬性,並沒有函數屬性。當我們要使用實例的函數屬性時,本質上它是去調用類的函數屬性。同理實例也可以訪問類屬性。

class Student(object):
  '這是一個學生信息的類'
    school='szu'
    def __init__(self,name,age):
        self.__name=name
        self.__age=age
    def printmassage(self):
        print(self.__name,self.__age)

s1=Student('zs',18)
print(Student.__dict__)
print(s1.__dict__)
print(s1.school)
s1.printmassage()

 

上面代碼的輸出如下:

{'__module__': '__main__', 'school': 'szu', '__init__': <function Student.__init__ at 0x00B3DC00>, 'printmassage': <function Student.printmassage at 0x00B3DBB8>, '__dict__': <attribute '__dict__' of 'Student' objects>, '__weakref__': <attribute '__weakref__' of 'Student' objects>, '__doc__': None}
{'_Student__name': 'zs', '_Student__age': 18}
szu
zs 18

我們從上面可以看看出實例本身並沒有函數屬性,也沒有school屬性。但是我們去調用卻可以正常使用,本質上是在自己的屬性字典中找不到,就去類屬性找。實際上上面的調用方式可以改成下面的形式

print(Student.__dict__['school'])
Student.__dict__['printmassage'](s1)

 

 

我們再來看看實例屬性和類屬性之間的關系。

class Student(object):
    '這是一個學生信息的類'
    school='szu'
    def __init__(self,name,age):
        self.__name=name
        self.__age=age
    def printmassage(self):
        print(self.__name,self.__age)

s1=Student('zs',18)
s1.school='bju'
print(s1.school)  #bju
print(Student.school)   #szu
#也就是本質上是給實例增加了一個屬性。而不是去修改類屬性。


class Student(object):
    '這是一個學生信息的類'
    school='szu'
    ls=['a','b','c']
    def __init__(self,name,age):
        self.__name=name
        self.__age=age
    def printmassage(self):
        print(self.__name,self.__age)

s1=Student('zs',18)
s1.ls=[1,2,3]
print(s1.ls)   #[1, 2, 3]
print(Student.school)  #['a', 'b', 'c']
#原因是跟上面一樣的,但是我們在看看下面這個例子
class Student(object):
    '這是一個學生信息的類'
    school='szu'
    ls=['a','b','c']
    def __init__(self,name,age):
        self.__name=name
        self.__age=age
    def printmassage(self):
        print(self.__name,self.__age)

s1=Student('zs',18)
s1.ls.append('d')
print(s1.ls)  #['a', 'b', 'c', 'd']
print(Student.ls)   #['a', 'b', 'c', 'd']

#這是因為沒有給實例增加一個屬性,而是直接修改類屬性
View Code

 

 

 

 

2、__doc__,描述信息。__name__   類的名字。

class Student(object):
    '這是一個學生信息的類'
    school='szu'
    def __init__(self,name,age):
        self.__name=name
        self.__age=age
    def printmassage(self):
        print(self.__name,self.__age)

print(Student.__name__)   #Student
print(Student.__doc__)    #這是一個學生信息的類

 


免責聲明!

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



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