4 1 3 資料成員

2022-08-18 16:24:16 字數 3690 閱讀 2981

資料成員用來說明物件特有的一些屬性,如人的身份證號、姓名、年齡、性別、身高、學歷,汽車的品牌、顏色、最高時速,蛋糕的名稱、尺寸、配料,書的名字、作者、isbn、出版社、出版日期,等等。

資料成員大致可以分為兩類:屬於物件的資料成員和屬於類的資料成員。

屬於物件的資料成員主要指在建構函式__init__()中定義的(當然也可以在其他成員方法中定義),定義和使用時必須以self作為字首(這一點是必須的),同乙個類的不同物件(例項)之間的資料成員之間互不影響;

屬於類的資料成員是該類所有物件共享的,不屬於任何乙個物件,在定義類時這類資料成員不在任何乙個成員方法的定義中。在主程式中或類的外部,物件資料成員屬於例項(物件),只能通過物件名訪問;而類資料成員屬於類,可以通過類名或物件名訪問。另外,在python中可以動態地為類和物件增加成員,這也是python動態型別的一種重要體現。

1

class

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

print

(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中為類和例項動態增加方法

1

deffunc(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

拓展知識:利用類資料成員的共享性,可以實時獲得該類的物件數量,並且可以控制該類可以建立的物件最大數量。例如:

1

class

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...