資料成員用來說明物件特有的一些屬性,如人的身份證號、姓名、年齡、性別、身高、學歷,汽車的品牌、顏色、最高時速,蛋糕的名稱、尺寸、配料,書的名字、作者、isbn、出版社、出版日期,等等。
資料成員大致可以分為兩類:屬於物件的資料成員和屬於類的資料成員。
屬於物件的資料成員主要指在建構函式__init__()中定義的(當然也可以在其他成員方法中定義),定義和使用時必須以self作為字首(這一點是必須的),同乙個類的不同物件(例項)之間的資料成員之間互不影響;
屬於類的資料成員是該類所有物件共享的,不屬於任何乙個物件,在定義類時這類資料成員不在任何乙個成員方法的定義中。在主程式中或類的外部,物件資料成員屬於例項(物件),只能通過物件名訪問;而類資料成員屬於類,可以通過類名或物件名訪問。另外,在python中可以動態地為類和物件增加成員,這也是python動態型別的一種重要體現。
1class
car(object):
2 price = 100000 #
屬於類的資料成員34
def__init__
(self,c):
5 self.color = c #
屬於物件的資料成員67
if__name__ == '
__main__':
89 car1 = car('
red') #
例項化兩個物件
10 car2 = car('
blue')
1112
print(car1.color,car.price) #
訪問物件和類的資料成員
1314 car.price = 110000 #
修改類的屬性
1516 car.name = 'qq'
#動態增加類的屬性
17 car1.color = '
yellow'#
修改例項的屬性
1819
(car2.color,car.price,car.name)
20print
(car1.color,car.price,car.name)
2122
#定義乙個函式
23def
setspeed(self,s):
24 self.speed =s
2526
#匯入types模組
27import
types
2829
#動態為物件增加成員方法
30 car1.setspeed =types.methodtype(setspeed,car1)
3132
#呼叫物件的成員方法
33 car1.setspeed(50)
34print
(car1.speed)
353637#
程式執行結果:38#
red 10000039#
blue 110000 qq40#
yellow 110000 qq41#
50
#測試一下car2能否訪問到為car1物件增加的成員方法car2.setspeed(30)
print(car2.speed)
#果然不出我所料,報錯了,說明為car1動態增加的方法只能被car1引用
題目:python中為類和例項動態增加方法
1deffunc(a,b):
2print
(a,b)34
class
foo(object):
5pass
67 foo =foo()
89 foo.func(4,1) #
會報錯,因為例項foo沒有func成員方法
101112#
類動態增加方法:直接賦值
13 foo.func =func
1415
#例項這樣做是不行的,得到的只是乙個可呼叫的屬性
16 foo.func2=func
1718
1920
#python: 為物件動態新增函式,且函式定義來自乙個str21#
在python中,通常情況下,你只能為物件新增乙個已經寫好的方法22#
需求:傳入乙個str型別的變數,其值是乙個完整的合法的python函式定義,然後為乙個物件新增這個函式:
2324 method_str = u'''
25def say(self, name)
26print 'my nameis', name
27'''
2829
class
myclass:
30def
__init__
(self):
31pass
3233
defextends(self, method_name, method_str):
3435
pass
3637
38 obj =myclass()
39 obj.extends('
say'
, method_str)
40 obj.say('
wendal
') #
列印出my name is wendal
拓展知識:利用類資料成員的共享性,可以實時獲得該類的物件數量,並且可以控制該類可以建立的物件最大數量。例如:
1class
demo(object):
2 total =034
#該方法在__init__()之前被呼叫
5def
__new__(cls,*args,**kwargs):
6if cls.total >= 3:
7raise exception('
最多只能建立3個物件')
8else:9
return object.__new__
(cls)
1011
def__init__
(self):
12 demo.total = demo.total + 1
1314
if__name__ == '
__main__':
15 t1 =demo()
16 t2 =demo()
17 t3 =demo()
18 t4 =demo()
1920
'''21
traceback (most recent call last):
22file "c:/users/dddd/pycharmprojects/untitled5/test1.py", line 18, in
23t4 = demo()
24file "c:/users/dddd/pycharmprojects/untitled5/test1.py", line 7, in __new__
25raise exception('最多只能建立3個物件')
26exception: 最多只能建立3個物件
27'''
413 反轉整數
原題 您在真實的面試中是否遇到過這個題?是 給定x 123,返回 321 標籤 整數思路 按位依次取出數字存入陣列,再將數字取出乘以對應的權值完成反轉。注意反轉過程中隨時判斷數值是否超出int型範圍,超出範圍則返回0。參考 c int型負數除法取餘問題 ac class solution int s...
4 13 學習筆記
1.整數拆分為2 的冪的和 用陣列a 直接記錄結果。從前往後推的時候,有兩種可能性,分為a 2m 1 和a 2m 易知a 2m 1 a 2m 對於a 2m 它的所有拆分方式分為兩大類 1 含有1的,這部分所有方式都去掉1,就得到a 2m 1 2 不含有1的,也就是分出的都是2的倍數,那麼都除以2,就...
4 1 3 直譯器的資料結構
4.1.3 直譯器的資料結構 除了定義表示式的外部語法,直譯器的實現必須定義其內部操作的資料結構,作為乙個程式執行的一部分,例如程式和環境的表示,真值與假值的表示。斷言的測試 對於條件,我們接受任何事為真,如果它不是顯式地顯示為假的物件。define true?x not eq?x false de...