Why we need corresponding class function with each method in python?
我在python中学习oop,并遵循这个和这个stackoverflow答案以及这个帖子。
我知道类是如何工作的,方法是如何调用的,以及所有事情,但我有一些疑问:
考虑一下这段代码:
ZZU1正如我在教程中看到的:
BLCK1现在我的困惑是为什么程序需要用每个方法调用类?
类.甲基(obj,args)?什么?
就像我们称距离为点距离一样,它成为"自我"的原因。当我们叫a.bye时,它就变成了point.bye(a)"self"的原因。
当每个方法都需要点类时,如果我们不将点类用于每个方法,会发生什么?
为什么它不能只是冰毒(obj,args)起作用?
我主要怀疑的是为什么它被称为类。当我们用方法的属性调用时,每个方法都有一个方法。为什么每个人都需要电话?
如果我理解正确,那么它是必要的,因为每个方法都可以访问其他方法的数据,比如变量和东西?
关键是
python internally converts it for you
号
从你的角度来看:
meth(self, args) 是用于定义成员函数的语法;以及obj.meth(args) 是用来调用成员函数的语法。
编辑1如果我正确理解了您的问题,您会问为什么当Python已经有了可用的实例,并且实例知道自己的类型时,它需要知道类。实际上,python总是基于实例获取方法。我认为本教程的重点是,在Python中,类是定义函数的主要地方。这与一些面向对象的语言不同,在这些语言中,每个实例都有自己的方法,并且它们之间可能完全不同。因此,本教程将对比Python中的常用方法:
1 2 3 | class Foo: def bar(self): pass |
有一个替代方案(在Python中可能,但不是典型的):
1 2 | foo = object() # an empty instance foo.bar = lambda self: pass |
号
edit 2 python方法通常位于类中,而不是实例中。即使创建1000个
edit 3
1 2 | a = Point(1,2) b = Point(3,4) |
在
编辑4假设您没有使用对象,而是使用字典:
1 2 3 4 5 | a = {'x':1, 'y':2} # make a"point" b = {'x':3, 'y':4} # make another def point_distance(point): print (point['x']) |
。
然后你可以说:
1 | point_distance(a) |
以获得
1 | print (a['x']) |
。
类基本上就是这样做的,语法更清晰,并且有一些好的好处。但是,正如
因为您可以在不同的类中使用相同的方法名,它需要调用适当的方法名。所以如果你有
1 2 3 4 5 6 7 8 9 10 11 12 | class Class1: def meth(): print"This is Class 1" class Class2: def meth(): print"This is Class 2" c1 = Class1() c2 = Class2() c1.meth() # equivalent to Class1.meth(c1) c2.meth() # equivalent to Class2.meth(c2) |
。
如果把
类定义了它们的所有实例的共同点。通常这是包含其每个方法的代码。要将此代码应用于正确的实例对象,语言将解释
1 | instance.method(arg1, arg2, ...) |
。
作为
1 | class_of_instance.method(instance, arg1, arg2, ...) |
所以代码被应用到适当的类实例。