簡體   English   中英

python:類范圍中的函數

[英]python: functions in class scope

我只是在玩這種語言,但是想知道是否可以使用在類的范圍內定義的函數而不將self定義為第一個參數。

我理解實現類的“正確”方法可能是

class minimal:
    variable = 1    
    def add(self,x,y):
        return x+y
    def __init__(self,x):
        self.value = self.add(x,self.variable)

m = minimal(1)
print m.value
--> 2

但是,如果我以與variable類似的方式定義和應用add (在類的范圍內),那么我得到一個錯誤(預期):

class minimal:
    variable = 1
    def add(x,y):
        return x+y
    def __init__(self,x):
        self.value = self.add(x,self.variable)

m = minimal(1)
print m.value
--> TypeError: add() takes exactly 2 arguments (3 given)

有沒有解決的辦法? 或者通常建議一切都是通過明確引用self來定義的(即__init__方法中定義的self.variable=1add self定義為第一個參數)?

編輯 __init__方法已更正為在第二種情況下分配給self.value而不是嘗試返回值(無意)。

是的 ,但不要

第一個參數的名稱是任意的。 該對象始終作為第一個參數傳遞。 聲明add ,該對象將作為x傳遞。 當你調用self.add(x,self.variable)self綁定到x in add, __init__ x綁定到y in addself.variable作為第三個參數傳遞, add不被聲明為。

class minimal:
    variable = 1
    def add(x,y, *args):
        print('x: %s;\ny: %d;\nargs: %s;\n' % (x, y, args))
    def __init__(self,x):
        self.add(x,self.variable)
\n >>> minimal(2)\n x:<__ main __。最小對象位於0x1006e6e90>;\n y:2;\n args:(1,);\n

總而言之,即使你不使用self作為第一個參數,你仍然可以將對象作為方法的第一個參數傳遞。

您可以將方法標記為靜態,請嘗試以下操作:

class minimal:
  variable = 1

  @staticmethod
  def add(x,y):
    return x+y

  def __init__(self,x):
    print self.add(x,self.variable)

m = minimal(1)

雖然我改變了這個,所以你的init方法不返回一個值,它不應該。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM