-1

我需要一些帮助来定义某些术语。我已经编程了几个月(python 和 JavaScript),但在理解一些编程术语时仍然有些困难

这就是我现在正在做的事情:

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

它非常简单,易于执行和理解,但我不知道什么是类、函数和方法。每次我在谷歌上搜索一个答案时,通常都会使用更多我不理解的编程词来定义一些大的定义。我需要一些基本的定义和一些最好的例子。我讨厌不得不问这种问题,任何帮助将不胜感激。谢谢。

4

3 回答 3

1

函数是可以做某事和/或返回结果的东西,这取决于您调用它的参数。

如何创建和使用函数:

def function(foo):
    ...

result = function("bar")

你问的是一个类,但首先我要解释一个对象。

一个对象包含一些数据并且可以做一些事情。它可以做的事情是函数,与对象关联的函数特别称为方法。除了参数之外,方法的行为可以而且通常确实取决于对象的数据,并且可以更新数据。在某些编程语言中,您不能直接访问对象中的数据,或者可能是其中的一部分但不是全部;您只能要求对象做它所做的事情,它可能会或可能不会将其数据的值设置为它所做的事情之一。但是,在 Python 中,您可以直接访问数据,但有些人仍然认为不这样做是一种好习惯。

类是一组对象,它们具有相同类型的数据和可以执行的相同操作集。它还提供了创建该类的新对象的起点。

如何使用方法创建类:

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

如何制作类的对象:

f = Foo()

如何调用对象的方法:

f.method(argument)
于 2013-06-05T03:37:57.357 回答
1
def thisIsAFunction(inputNumber):
     oneMore= inputNumber+ 1
     return oneMore

这是一个函数,它返回比输入数字多一。

所以稍后在你的代码中你这样称呼它

anotherVariable = thisIsAFunction(5)

然后当你想:print anotherVariable它会打印6

类是相似的,但更广泛和包容

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下面定义另一个函数(但它在一个类中,所以它是一个方法lol)就像

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

然后每次我们想给贝丝过生日,我们就输入

beth.birthday()
beth.age
20
于 2013-06-04T22:58:56.007 回答
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_car是 的一个实例Car。也就是说,这是您可以做的drive事情(并且可以做其他事情)。

Car.driveCar类的方法。这意味着这new_car.drivenew_car实例的一个方法。注意self定义中的参数drive。当您调用时new_car.set_odometer(100),该self参数指的是new_car.

joyride是一个函数。它不属于任何类,也没有self参数。这实际上是方法和函数之间的唯一区别。

(实际上,在 Python 中,方法只是将函数和实例放在一起的一种方式。例如,new_car.drive.im_selfis new_car。但不要担心。)

请注意,内部joyride,stolen_car是您传入的同一个对象——在本例中,new_car。所以,你可以打电话stolen_car.drive(),它正在开车new_car

在实际代码中,您通常不会使用 and 之类的方法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'>

粗略地说,atype和 aclass是一回事。( Atype实际上可以用自定义 C 代码编写,而不是用 aclass等等,所以这并不完全正确,但它已经足够接近了。)

now = datetime.now()

datetime.now是一种特殊的东西,称为 a classmethod。普通方法只能在实例上调用,而类方法则在类上调用。暂时不用担心这个。重要的是它返回的是一个对象,一个 type 的实例datetime。同样,您可以通过打印出它来测试它type

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

然后您只需访问对象的一些数据属性:

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

这些属性由now方法设置,与普通类在其__init__方法中设置属性的方式非常相似。

于 2013-06-04T23:15:12.897 回答