Python 试图在类内调用函数,但它';它不工作了
我试图调用一个函数,但它不起作用。代码如下:Python 试图在类内调用函数,但它';它不工作了,python,Python,我试图调用一个函数,但它不起作用。代码如下: class Compagnie: def __init__(self, nom, actions, prix): self.nom = nom self.actions = actions self.prix = prix def setActions(self): print("Changer le nombre d'actions pour "
class Compagnie:
def __init__(self, nom, actions, prix):
self.nom = nom
self.actions = actions
self.prix = prix
def setActions(self):
print("Changer le nombre d'actions pour " + self.actions)
我做到了:
Compagnie.setActions(50)
我得到一个错误:
AttributeError:“int”对象没有属性“actions”
我做错了什么?类定义定义了
Compagnie
而不是Compagnies
。除此之外,调用setActions
需要一个对象,因此首先需要创建:
compagnie = Compagnie("foo", "bar", 33.0)
compagnie.setActions(50)
但是,这将失败,因为您对setActions
的定义不带参数。从名称来看,我认为它的意思是:
def setActions(self, actions):
self.actions = actions
print("Changer le nombre d'actions pour " + self.actions)
您的方法setActions未设置为接受任何参数。“self”是对实例的引用,允许您使用self修改实例变量。在这个方法里面。要解决此问题,请执行以下操作:
def setActions(self, val):
self.actions = val
print("Changer le nombre d'actions pour " + self.actions)
类可以包含三种类型的方法:
def imethod(self,...): ...
@classmethod
def cmethod(cls,...): ...
@staticmethod
def smethod(...): ...
这些只能在类的实例上调用,并且可以访问类和实例属性。第一个参数传统上称为self
,在实例上调用时自动传递给方法:
instance = Class()
instance.imethod(...)
def imethod(self,...): ...
@classmethod
def cmethod(cls,...): ...
@staticmethod
def smethod(...): ...
这些可以在类本身或实例上调用,但只能访问类属性。第一个参数传统上命名为cls
,在类上调用时自动传递给方法:
Class.cmethod(...)
instance.cmethod(...) # works, but can't access instance attributes.
def imethod(self,...): ...
@classmethod
def cmethod(cls,...): ...
@staticmethod
def smethod(...): ...
这些函数与类相关,但无法访问实例或类属性,因此它们不会作为第一个参数传递给类或实例对象。可以在实例或类上调用它们:
instance = Class()
Class.smethod(...)
instance.smethod(...)
static
cls.cvar=1
static
cls.cvar=1
self.cvar=1 self.ivar=2
在您的例子中,您定义了一个实例方法,但没有首先创建实例,因此您尝试传递的int
参数被传递为self
,并在内部尝试访问整数50
上的操作。首先创建一个实例,不要传递任何参数<代码>自我
将自动传递:
compagnie = Compagnie('nom','actions','prix')
compagnie.setActions()
这是一个实例方法。这意味着它接受实例作为其第一个参数,该参数通常由self
表示self
允许方法访问实例的状态。因此,当您调用Compagnie.setActions(50)
时,“50”将作为一个对象进行计算。这是Python对其进行评估的方式:
def setActions(50):
print("Changer le nombre d'actions pour " + 50.actions)
因为50没有属性“actions”,所以会出现该错误。因为它是实例方法,所以可以通过实例调用它。或者,如果要按类调用它,则应创建一个实例并将其作为参数传递:
c=Compagnie(1,"'my_actions'","my_prix") # create an instance
Compagnie.setActions(c) # pass it as an arg
除非您将方法定义为classmethod,否则您无法执行此操作。请先实例化Companie对象。Compagnies vs Compagnie?@D.Seah-Oh。我正在更新问题。您是否先实例化了一个实例?e、 g.compagnie=compagnie([“hello”],“world”),然后执行compagnie.setActions()。顺便说一句,setActions不接受任何参数。明白了。你说得对!非常感谢你!谢谢你的回答,我刚刚这么做了,但它给了我一个错误“TypeError:setActions()接受1个位置参数,但得到了2个”我不明白为什么会出现这个错误,因为除了self之外,没有为
setActions()定义任何参数,而且它不使用任何其他参数。将其称为compagnie.setActions()
将起作用。否则,您将不得不更改函数的定义,以添加一个参数来接受int。