在建立乙個class時,我們可以直接在建立時給類(class)新增方法,例如:
>>> class student(object):
def __init__(self, name, age, score):
self.name = name
self.age = age
self.score = score
>>> s1 = student('bob', 23, 95)
>>> s1.name
'bob'
>>> s1.age
23>>> s1.score
95
與此同時,也可在class建立之後,再給類及例項繫結方法,例如:
1. 給例項繫結方法
>>> class student(object):
pass
>>> s1 = student()
>>> s2 = student()
>>> from types import methodtype
>>> def set_age(self, age):
self.age = age
>>> s1.set_age = methodtype(set_age, s1)
>>> s2.set_age = methodtype(set_age, s2)
>>> s1.set_age(20)
>>> s1.age
20>>> s2.set_age(30)
>>> s2.age
30
利用types模組中的methodtype函式來為例項s1,s2繫結方法。
2. 給類(class)繫結方法
>>> def set_score(self, score):
self.score = score
>>> student.set_score = set_score
>>> s1.set_score(90)
>>> s1.score
90>>> s2.set_score(100)
>>> s2.score
100
給類繫結的方法同樣適用與s1、s2例項。
__slots__變數
使用__slots__變數可以限制類以及例項的屬性,例如:
>>> class student(object):
__slots__ = ('name', 'age')
>>> s1 = student()
>>> s1.name = 'a'
>>> s1.age = 24
>>> s1.score = 90
traceback (most recent call last):
file "", line 1, in s1.score = 90
attributeerror: 'student' object has no attribute 'score'
使用__slots__變數限制屬性為name、age,故給例項新增score屬性,將出現attributeerror錯誤。
若使用__slots__變數僅對當前類例項起作用,對繼承的子類不起作用,例如:
>>> class graduatestudent(student):
pass
>>> g = graduatestudent()
>>> g.score = 98
除非存在在父類和子類都定義了__slots__變數,這樣子類例項允許定義的屬性就是子類的和父類__slots__相加的範圍,例如:
>>> class student(object):
__slots__ = ('name', 'age')
>>> class juniorstudent(student):
__slots__ = ('name', '***')
>>> j = juniorstudent()
>>> j.name = 'tom'
>>> j.age = 20
>>> j.*** = 'male'
>>> j.score = 100
traceback (most recent call last):
file "", line 1, in j.score = 100
attributeerror: 'juniorstudent' object has no attribute 'score'
Python語言 類和物件
使用python版本 python2.7 定義乙個名為classname的類,它含有乙個變數,乙個方法 metaclass type 必須有 defclass classname variety 15 defmethod self print in method 注意 在這個位置的variety位於...
python如何給字典排序
在python裡,字典dictionary是內建的資料型別,是個無序的儲存結構,每一元素是key value對 如 dict 其中 username 和 password 是key,而 xiaoming 和 123456 是value,可以通過d key 獲得對應值value的引用,但是不能通過va...
細說python類2 類動態新增方法和slots
先說一下類新增屬性方法和例項新增屬性和方法的區別,類新增屬性屬於加了乙個以類為全域性的屬性 據說叫靜態屬性 那麼以後類的每乙個例項化,都具有這個屬性。給類加乙個方法也如此,以後類的每乙個例項化都具備這個方法 但是據說叫動態方法。但是給例項加乙個屬性,作用域就是這個例項,是與類沒關係的 據說這種屬性叫...