我对Python很陌生,正在解决OOP。对于何时使用对方法和类的调用,我有些困惑。下面的示例代码输出平均值,但是从现实世界的角度来看,我好奇何时使用Class vs方法进行调用。我很确定这只是我可能尚未解决的问题,但是关于何时使用一个在另一个上这只是一个困惑。
class Student:
def __init__(self, new_name, new_grades):
self.name = new_name
self.grades = new_grades
def average(self):
return sum(self.grades) / len(self.grades)
student_one = Student('Test User', [70, 88, 90, 99])
# object.method()
print(student_one.average())
# Class.method(object)
print(Student.average(student_one))
答案 0 :(得分:4)
在您的示例中,没有区别。 使用第一种方法。。第二种方法使您似乎出于某种原因需要使用“后门”,例如,如果Array
(
[0] => 1
[1] => 10
[2] => 10-Einzel.pdf
)
但您想专门呼叫{{ type(student_one) is not Student
类的1}}方法。
对于幕后发生的事情,第一种方法使用bound method,第二种方法使用普通的function。
average
绑定方法只是通过descriptor protocol *绑定到实例的函数,实例(“ self”)作为隐式第一个位置参数传递:
Student
通过使用类上的函数并显式传递实例,您实际上执行的操作与自动执行描述符的操作相同。
要更深入地了解什么是方法,请参见文档here中有关此绑定过程的详细文档。
* 只是通过“”的一种奇特的说法。即点分属性访问