在下面的类中,类方法cost
中的self参数被替换为另一个名称'insta',但仍然有效。为什么呢?
class car():
model='sedan'
year=2016
price=775000
def cost(insta):
print "Price of car is: ",insta.price
c1=car()
c1.model='SUV'
c1.year=2017
c1.price=120000
c1.cost()
c2=car()
c2.model='hatchback'
c2.year=2018
c2.price=600000
c2.cost()
答案 0 :(得分:4)
命名self
类方法的第一个参数只不过是一个约定。您的代码完全等同于:
def cost(self):
print "Price of car is: ",self.price
然而,这个惯例在任何地方都受到尊重,虽然我知道这只是一个惯例,但我认为这是我第一次看到代码没有命名实例self
。
答案 1 :(得分:0)
当您将c1
实例化为类car
的对象时,c1
会获得您提供的3件事(属性):model
,{{1和year
。为了让price
知道您希望其c1
方法访问其cost()
而不是price
的价格,例如,您( (正确)定义了c2
方法,将打印的cost()
与调用price
的对象的price
相关联。
单词cost()
很常见,也许是因为给定了Python语法,当你在self
中用点表示法调用类对象上的方法时,它可能会更像是在调用{{{ 1}} on classObject.classMethod()
“而不是更典型地”将classMethod()
传递给classObject
“让我们说,因为你没有把someArgument
放在someFunction
的括号。 但关键部分是您在课程定义中所做的关联(可与“classObject
”或“classMethod
”或“self
”一起使用,只要你一直使用所选的单词)。也许一个有用的命名将有助于阐明在这个特定背景下发生的事情
insta
因为您希望puppy
的{{1}}成为def cost(myCar):
print ("Price of car is: ", myCar.price)
的{{1}}。这是cost
以更通用(因而更易读和可维护)的方式所做的事情。