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