物件導向程式設計 使用 slots

2021-08-19 18:26:39 字數 1619 閱讀 4430

學習廖雪峰老師的python教程中的使用__slots__的筆記:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

class student(object):

pass

s=student()

s.name=('michael')#給例項繫結屬性

print(s.name)

##########給例項繫結方法##############

def set_age(self,age):

self.age=age

from types import methodtype

s.set_age=methodtype(set_age,s)#給s繫結set_age方法

s.set_age(25)

s2 = student()

#s2.set_age(25) #給乙個例項繫結的方法對另乙個例項是不起作用的,不注釋掉程式會卡在這裡

print("the age of s is:",s.age)

#print("the age of s2 is:",s2.age)

#############給class繫結方法,所有例項都可用#############

def set_score(self, score):

self.score = score

student.set_score = set_score

s.set_score(100)

print("the score of s is:",s.score)

s2.set_score(99)

print("the score of s2 is:",s2.score)

__slots__定義的屬性僅對當前類例項起作用,對繼承的子類是不起作用的:

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

class student(object):

__slots__ = ('name', 'age') # 用tuple定義允許繫結的屬性名稱

s = student() # 建立新的例項

s.name = 'michael' # 繫結屬性'name'

print("the name of s is",s.name)

s.age = 25 # 繫結屬性'age'

print("the age of s is",s.age)

#s.score = 99 # 繫結屬性'score',應該是不成功的,因為 __slots__中不包含score屬性

#print("the score of s is",s.score)

###################__slots__定義的屬性僅對當前類例項起作用,對繼承的子類是不起作用的:###################

class graduatestudent(student):

pass

g=graduatestudent()

g.score=900

print("the score of s is",g.score)

python 物件導向程式設計的 slots

同乙個類下,不同例項定義的屬性或者方法,其他例項如果沒有定義是不能使用的 定義乙個類 class student object pass 給類繫結乙個例項 s student 給例項繫結乙個屬性 s.name micheal s.name micheal s1 student s1.name 報錯a...

Python 物件導向 slots

預設情況下,python 用乙個字典來儲存乙個物件的例項屬性。這使得我們可以在執行的時候動態的給類的例項新增新的屬性 test test test.new key new value 然而這個字典浪費了多餘的空間 很多時候我們不會建立那麼多的屬性。因此通過slots可以告訴 python 不要使用字...

python物件導向程式設計高階篇 slots

python語言中我們可以隨時給例項增加新的屬性和方法 class student object pass s student s.name michael 動態給例項繫結乙個屬性 print s.name michael def set age self,age 定義乙個函式作為例項方法 self...