python中的类和对象

python中的类和对象,python,python-2.7,Python,Python 2.7,我定义了这样一个类: class classname: def funname(self,idno,door): self.idno = 120 self.door = 150 class ClassName: def funname(self): self.idno = 120 self.door = 150 然后,创建一个对象: obj = classname() 像这样访问该对象(obj)的变量时,obj

我定义了这样一个类:

class classname:
    def funname(self,idno,door):
        self.idno = 120
        self.door = 150
class ClassName:
    def funname(self):
        self.idno = 120
        self.door = 150
然后,创建一个对象:

obj = classname()
像这样访问该对象(obj)的变量时,
obj.funname()
我遇到了一个错误:

TypeError: funname() takes exactly 3 arguments (1 given)
但是,
obj.funname(4,5)
运行良好

我已经在课堂上给变量赋值了。那么,我为什么要再次通过这些论点呢?即使我传递了值,值也不会改变

>>>obj.idno
120
>>>obj.door
150

那么传递它们有什么意义呢?

您需要使用可选参数或删除它们

class classname:
   def funname(self, idno = 120, door = 150):
      self.idno = idno
      self.door = door


我认为您需要创建一个
\uuuuu init\uuuu
函数来传入您的ID号和门,如:

def __init__(self, idno, door):
    self.idno = idno
    self.door = door
现在,当您创建一个新对象时,您传入这些值并将其存储:

foo = classname(120, 150)
之后,在某些功能中,您可以访问它们:

def printStuff(self):
    print("My idno is {} and my door is {}".format(self.idno, self.door))
你喜欢:

foo.printStuff()
这将输出:

"My idno is 120 and my dooor is 150"

如果要始终设置这些值,请执行以下操作:

class classname:
    def funname(self,idno,door):
        self.idno = 120
        self.door = 150
class ClassName:
    def funname(self):
        self.idno = 120
        self.door = 150
现在,如果希望有默认值,请执行以下操作:

class ClassName:
    def funname(self, idno=120, door=150):
        self.idno = idno
        self.door = door

事实上,如果您不打算使用参数,那么就不要编写函数来接受它们!你想做什么?在我看来,你想将函数定义为
def funname(self):
@DavidRobinson,那么我就不能在类中使用idno,addr变量了。你已经将它们硬编码为
self.idno=120
self.door=150
,而不是你正在传递的值,所以这没有什么区别。你仍然可以在课堂上做
self.door
,它将始终等于150。对不起,这是一个打字错误。