![](/img/trans.png)
[英]In Python how functions on objects are still available while the class is not in scope?
[英]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=1
, add
self
定義為第一個參數)?
編輯 __init__
方法已更正為在第二種情況下分配給self.value
而不是嘗試返回值(無意)。
第一個參數的名稱是任意的。 該對象始終作為第一個參數傳遞。 聲明add
,該對象將作為x
傳遞。 當你調用self.add(x,self.variable)
, self
綁定到x
in add, __init__
x
綁定到y
in add
, self.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.