2013-06-04 56 views
-1

我需要一些幫助來定義某些術語。我一直在編程幾個月(Python和JavaScript的),仍然有一定的麻煩了解一些編程方面的編程術語和定義(python)

這是我在什麼工作現在:

from datetime import datetime 
now = datetime.now() 
month1 = now.month 
year1 = now.year 
day1 = now.day 
print "%s/%s/%s" % (month1, year1, day1) 

這是非常簡單的和它很容易執行和理解,但我不知道什麼類,功能和方法。每次我回答Google的答案時,通常都會使用我不明白的更多編程單詞的一些重要定義。我需要一些基本的定義和更好的例子。我討厭不得不問這種問題,任何幫助將不勝感激。謝謝。

+2

我真的認爲方法和函數是相同的東西,直到我讀到這個:http://stackoverflow.com/a/155655/16959(這應該回答你所有的三個問題) –

+4

方法只是附加到一個類的功能。 'datetime'是一個類。 'now'變量是'datetime'類的一個實例 – cmd

回答

1
def thisIsAFunction(inputNumber): 
    oneMore= inputNumber+ 1 
    return oneMore 

這是一個函數,它比輸入的數字多返回一個。

所以後來在你的代碼中調用它

anotherVariable = thisIsAFunction(5) 

那麼當你想:print anotherVariable它將打印6

類是類似的,但更廣泛和encompasing

class thisIsaClass: 
    someVar = 1 
    def __init__(self, inputNumber): 
      self.inputNumber = inputNumber 

這剛剛定義了一個名爲「thisIsaClass」的對象來創建一個對象....

>>> a = thisIsaClass(1) #creating one 'thisisaclass' object called a 
>>> b = thisIsaClass(2) #another called b 
>>> 
>>> a.inputNumber # getting inputnumber from a 
1 
>>> b.inputNumber 
2 
>>> a.someVar #someVar doesnt have 'self' in front of it so its not referring to its own someVar, its referring to its classes someVar 
1 
>>> b.someVar 
1 
>>> thisIsaClass.someVar = 3 
>>> a.someVar #see? it changed it for all of th someVars 
3 
>>> b.someVar #because its the same someVar 
3 
>>> thisIsaClass.inputNumber #and THIS one doesnt actually have a "inputNumber" because it only belongs to the actual objects 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: class thisIsaClass has no attribute 'inputNumber' 

如果多數民衆贊成混淆,那麼最好的方式來看待一個類是關聯到人。

class human: 
    def __init__(self, name, height, age): 
      self.name = name 
      self.height = height 
      self.age = age 


beth = human('beth','64 inches', 19) 
beth.age 
19 

__init__是一種方法,因爲它是一個類中的定義。 (老實說,我不知道爲什麼它被稱爲是...但它是)如果我們定義的另一個功能(但其在一類這樣的方法笑)以下的init像

def birthday(self): 
     self.age = self.age+1 

那麼每次我們想要的給貝絲生日,我們只需要輸入

beth.birthday() 
beth.age 
20 
0

這可能是更容易,如果你定義自己的類,實例,方法和功能明白了一切。

class Car(object): 
    def set_odometer(self, miles): 
     self.miles = miles 
    def get_odometer(self): 
     return self.miles 
    def drive(self, miles): 
     self.miles += miles 

def joyride(stolen_car): 
    stolen_car.drive(100) 
    print 'Insert Yello song here' 

new_car = Car() 
new_car.set_odometer(0) 
print 'Now it has', new_car.get_odometer(), 'miles!' 
joyride(new_car) 
print 'Now it has', new_car.get_odometer(), 'miles!' 

所以:

Car是一類。一個類定義了一個新類型。正如int定義了整數,並且str定義了字符串,Car定義了一種新的東西,您可以drive(並做其他事情)。

每次創建Car類的新實例時,它都是一個對象。例如,new_carCar的一個實例。也就是說,這是一件你可以drive(並做其他事情)。

Car.driveCar類的一種方法。這意味着new_car.drivenew_car實例的一種方法。請注意0​​定義中的self參數。當您致電new_car.set_odometer(100)時,self參數指的是new_car

joyride是一個函數。它不是任何課程的一部分,也沒有self參數。這實際上是方法和功能之間的唯一區別。

(事實上,在幕後,在Python中,方法只是把一個函數和一個實例在一起的方式。例如,new_car.drive.im_selfnew_car,不過不要擔心。)

請注意,在joyride,stolen_car之內是您傳入的同一對象,在這種情況下爲new_car。所以,你可以打電話stolen_car.drive(),它的驅動new_car

在實際的代碼,你通常不會像set_odometerget_odometer方法麻煩,因爲你可以訪問數據的屬性,又名成員,如miles一樣容易,你可以訪問方法:

new_car = Car() 
new_car.miles = 0 
print 'Now it has', new_car.miles, 'miles!' 

然而,您通常會在特殊的__init__方法中爲您的屬性設置初始值。例如:

class Car(object): 
    def __init__(self): 
     self.miles = 0 
    def drive(self, miles): 
     self.miles += miles 

def joyride(stolen_car): 
    stolen_car.drive(100) 
    print 'Insert Yello song here' 

new_car = Car() 
print 'Now it has', new_car.get_odometer(), 'miles!' 
joyride(new_car) 
print 'Now it has', new_car.get_odometer(), 'miles!' 

那麼,如何適用於你的榜樣?

那麼,你的例子有點混亂。你根本不會調用任何普通的實例方法。但是,讓我們一步一步地完成它。

from datetime import datetime 

datetime是一類。你怎麼知道?嗯,你可以看看datetime模塊裏面的代碼,但是,更簡單地說,只是打印:

>>> from datetime import datetime 
>>> print datetime 
<type 'datetime.datetime'> 

不嚴格地說,新typeclass是相同的東西。 (A type實際上可以編寫定製的C代碼,而不是用一個class,等等,所以這是不完全正確,但它是足夠接近。)

now = datetime.now() 

datetime.now是一種特殊的東西稱爲classmethod。普通方法只能在實例上調用,而類方法則是在類上調用。現在不要擔心這一點。重要的是它返回的是一個對象,類型爲datetime的實例。同樣,你可以測試,通過打印出其type

>>> now = datetime.now() 
>>> print type(d) 
<type 'datetime.datetime'> 

然後你只需訪問該對象的一些數據屬性:

month1 = now.month 
year1 = now.year 
day1 = now.day 

這些屬性是由now方法設置,大大的一個普通的類將其__init__方法中的屬性相同的方式。

0

函數是一種可以做某件事和/或返回結果的東西,這取決於您調用的參數。

你如何製造和使用的功能:

def function(foo): 
    ... 

result = function("bar") 

你問到的一類,但首先我要解釋的對象。

一個對象包含一些數據,可以做一些事情。它可以做的事情是函數,而與對象相關的函數特別被稱爲方法。除參數之外,方法的行爲可以並且通常取決於對象的數據,並且可以更新數據。在一些編程語言中,你不能直接訪問對象中的數據,也可能不能直接訪問一些對象中的數據;你只能要求對象去做它所做的事情,它可能會或可能不會提供將數據的值設置爲它所做的事情之一。但是,在Python中,您可以直接訪問數據,但有些人仍然認爲不要這麼做。

一個類是一組對象,它們具有相同類型的數據和相同的可以執行的操作。它還提供了創建該類的新對象的起點。

如何使一個類的方法:

class Foo: 
    def method(self, parameter): 
     ... 

如何使類的一個對象:

f = Foo() 

如何調用對象的方法:

f.method(argument)