即使代码

时间:2016-11-25 05:50:45

标签: python

在下面的类中,类方法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()

2 个答案:

答案 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以更通用(因而更易读和可维护)的方式所做的事情。