python程式設計關於類當中方法的問題

2022-12-26 13:16:26 字數 3627 閱讀 3168

1樓:浩星辰錕

我想這裡你應該不理解的是__new__和__init__的區別所在,下面我就為您解釋一下:

1. 當你需要控制產生一個例項,用__new__;而當你需要控制例項的初始化,用__init__。我們一般在定義class的時候會先用__init__進行初始化。

2. __new__是建立例項的第一步,之所以是第一步是因為它負責返回這個例項。然而,__init__並不返回任何東西,它只負責當例項被建立之後去初始化這個例項。

3. 總體而言,不需要重複寫__new__除非需要生成一個不可改變的型別,比如字串,整型,或者陣列(tuple)。

那麼在這裡,v = cls.__new__(cls, object)就是建立一個例項並返回這個例項。cls就是指你建立的cls本身,就像在__init__(self, param_1, param_2)中的self一樣,而object則是用來初始化的,作用和__init__一樣。

由於你這裡處理的是陣列tuple,這是不可改變的(immutable)型別,所以需要寫__new__,否則是不需要寫的。

下面我給你一個我寫的定義點和向量的類,程式如下:

class point:

def __init__(self,x,y):

self.x = x

self.y = y

def __str__(self):

return '(' + str(self.x) + ', ' + str(self.y) + ')'

class vector:

def __init__(self,start_point,end_point):

self.start = start_point

self.end = end_point

def __str__(self)

return "[" + str(self.end.x - self.

start.x) + "," + str(self.end.

y - self.start.y) + "]"

def length_vector(self):

return math.sqrt( ((self.start.x - self.end.x) *

(self.start.x - self.end.x))

+ ((self.start.y - self.end.y) *

(self.start.y - self.end.y)))

希望能夠幫到你,如果不懂可追問,望採納!

2樓:

這一句是呼叫cls.__new__ 函式,這是一個生成物件的函式,系統會生成一個cls型別的物件(也叫例項),然後系統會自動呼叫cls.__init__ 初始化函式來初始化這個物件。

那麼這整個函式的意思就是 通過p1,p2建立一個類例項 v

3樓:

需要把整個類的定義放上來,特別是__new__的定義和__init__的定義.

按照目前來看,這裡應該是建立一個新的物件,然後下面進行初始化,繞過__init__初始化介面,至於為什麼要這樣做,需要看v的型別和__new__的處理.

4樓:匿名使用者

類方法就是用類名就能夠呼叫的方法,當然例項也能,這裡的cls就像例項方法的self一樣,指的是這個類本身,至於object是用來初始化的,object是所有類的祖先

j**a中一個類想呼叫另一個類的變數該怎麼辦?

5樓:匿名使用者

如果另一個類的變數是靜態變數,用 類名.變數名 呼叫如果是public的變數,回先建立另一個類的物件,用答 物件名.變數名 呼叫

如果是private的變數,用set、get方法操作物件還可以利用反射機制操作變數

python中關於類的問題求解

6樓:匿名使用者

作業要自己做才能提高水平,只說原理,這個問題,定義長寬高,和計算體積,都不是難點,主要是如何知道例項化數量。

python的特性是,類的變數,如果是在類裡面直接申明,那麼就是靜態變數,這個類的所有物件都共享共一個變數,用類名來訪問。在這個問題中可以用來計數,例如:

class box:

count = 0

def __init__(self, l, w, h):

box.count += 1

count變數用來統計物件個數,在類的初始化函式__init__中加1,每初始化一個物件就能使統計值加1了。

而在類的函式中申明的self的變數,就是類的成員變數,每個例項化的物件都有一份自己的拷貝,例如

class box:

count = 0

def __init__(self, l, w, h):

box.count += 1

self.length = l

self.width = w

self.height = h

self.volumn = l * w * h

self.length就是長度,其他的類推,比如要測試並列印出屬性

b1 = box()

b1.length

b1.width

b1.height

b1.volumn

我發覺我基本都把這題做完了。。。。

7樓:聽歌吧

問題太寬泛,估計沒幾個人會搭理你這種問題。

python 既可以程序導向,又可以物件導向。

類的引入,就屬於物件導向的方向。有了類,可以對一些事物進行抽象,對其屬性和方法進行封裝。

然後就是 為什麼會出現物件導向的問題了,因為程序導向式的程式設計,當**量過多時名就會出現各種問題。然後就有人提出了物件導向程式設計。

至於具體的,自己查資料去吧。問這樣的問題,很顯然,你的程式設計之路還有很遠很遠~~~

一個python程式設計的簡單問題

python的所有方法必須包含在類裡面嗎

8樓:__盜亦有道

如果你這個方法是類需要用的,當然要寫入類裡面了,

但是如果你這個方法只是你建立的個別例項要用的話,那就可以補在例項裡。

或者你還可以跟主程式寫在一起,不過這樣子就只限於你這個例項區域性能用了。

9樓:

類外面的叫函式(function)不叫方法(method),你都管他叫方法了那就是在類裡面的。

10樓:匿名使用者

不用的,python的方法和類的關係和c++的比較接近

python程式設計中,引入自定義類後出現如圖問題,什麼原因造成的,該怎麼解決。

11樓:匿名使用者

**沒問題,我這邊可以正常執行,輸出是8

你直接把test.py裡的**,一行一行的敲到shell裡看看能否執行

python 類的變數呼叫自己類中函式的問題

12樓:匿名使用者

protected void syncexec (runnable runnable)

13樓:匿名使用者

php是全銀河系最好的程式語言.

一道python題目關於程式設計輸出圖案

for i in range 6 print i 1 n python程式設計輸出如下圖案,上圖為題目要求,下圖為我寫的。求指導!a a初始化的時候應該是空字串,這樣加b就是一個星號b for i in range 7 a a b print a 如果解決了您的問題請採納!如果未解決請繼續追問 fo...

Python程式設計有哪些優點,python的優點有哪些

python程式語言的優點 1 廣泛的資料庫 python有一個可擴充套件的庫,包含了各種區域 其中包含了字串操作 正規表示式等,可以直接拿來使用,直接節省大量的時間。2 可擴充套件性 python具有可拓展性,可以將python直接放置在另外一種 語言中使用,同時python在使用相同位元組 的所...

python程式設計2 1 3 2 5 3 8 5 13 8前50項和

x 1.0 y 2.0 ret 0 for i in range 50 ret y x t yy x x tprint ret well,cause i noticed that some of the number can t be divided exactly,so i thought kee...