2014-04-20 27 views
0

主類:蟒蛇類的實現問題

class circle: 

    def __init__(self,radius=1): 

     self.radius=radius 

    def getArea(self): 
     return(3.142*self.radius*self.radius) 
    def getPerimeter(self): 
     return(2*3.142*self.myradius) 
    def setradius(self,radius): 
     if radius>0: 
      self.__radius=radius 
    def getRadius(self): 
     return self.__radius 

使用類:

from Circle import circle 

def main(): 


    c1=circle() 
    c1.radius=-1 
    c2=circle(5) 
    c3=circle(3) 
    print(c1.getArea()) 
    print(c2.getArea()) 
    print(c3.getArea()) 

main() 

你好的人!

我只是想學類基礎知識卻被避風港一些麻煩。希望你們能幫忙。感謝提前:)

  1. 究竟什麼是私有變量?我讀過它,人們說它不能在課堂以外訪問。好!但究竟是什麼意思呢?
  2. 私有數據和DATA HIDING相同?
  3. 自我究竟是什麼?我也讀過,但從以前的python答案無法理解。從我認爲self寫在每個def聲明中後。再次

謝謝!乾杯!

+1

你在'circle'類壓痕目前無效/含糊 - 您可以編輯您的文章,以解決它? – Michael0x2a

+0

@ Michael0x2a你好,現在好嗎? – Newbie

+0

不,問題是'def __init __()'需要與其他'def'行在相同的縮進級別。 – Leigh

回答

2

私有變量/數據隱藏/名稱重整

Python沒有,只能從對象中進行訪問私有實例變量。你不能在Python中執行數據隱藏。按照約定,Python代碼使用一個下劃線來表示一個不被視爲公共的名稱,但該名稱仍然可以在其對象之外訪問。但是,您正在使用名稱修改(帶有兩個前導下劃線)。名稱修改以下列方式替換標識符:

self.__radius變成self._classname__radius如果classname是該類的名稱。

即使錯位的名稱,然而,它們的類外訪問。由於類名成爲屬性名稱的一部分,因此名稱衝突只會降低名稱衝突的可能性。

self按照慣例我們用一個實例名稱。因此,考慮這個類:

class Circle(object): 
    def get_area(self): 
     pass 

類是Circle,我們可以的Circle一個實例分配給這樣的變量:

c = Circle() # an instance 

現在,如果我們調用get_area方法,我們可以這樣做像這樣:

c.get_area() # note the lack of arguments 

這等同於以下內容:

Circle.get_area(c) # instance c is now passed in as the first argument of `get_area`, which our method calls self 

self,然後,是傳遞給作爲第一個參數的方法的實例。