在面向对象的python中访问变量和函数 - python

时间:2013-09-04 09:40:51

标签: python oop variables init

  1. 如何在python对象中声明默认值?
  2. 没有python对象,它看起来很好:

    def obj(x={123:'a',456:'b'}):
        return x
    fb = obj()
    print fb
    

    使用python对象时出现以下错误:

    def foobar():
        def __init__(self,x={123:'a',456:'b'}):
            self.x = x
        def getStuff(self,field):
            return x[field]
    fb = foobar()
    print fb.x
    
    Traceback (most recent call last):
      File "testclass.py", line 9, in <module>
        print fb.x
    AttributeError: 'NoneType' object has no attribute 'x'
    
    1. 如何让对象返回对象中变量的值?
    2. 使用python对象,我收到错误:

      def foobar():
          def __init__(self,x={123:'a',456:'b'}):
              self.x = x
          def getStuff(self,field):
              return x[field]
      
      fb2 = foobar({678:'c'})
      print fb2.getStuff(678)
      
      Traceback (most recent call last):
        File "testclass.py", line 8, in <module>
          fb2 = foobar({678:'c'})
      TypeError: foobar() takes no arguments (1 given)
      

3 个答案:

答案 0 :(得分:5)

您没有定义类,您使用嵌套函数定义了一个函数。

def foobar():
    def __init__(self,x={123:'a',456:'b'}):
        self.x = x
    def getStuff(self,field):
        return x[field]

使用class来定义一个类:

class foobar:
    def __init__(self,x={123:'a',456:'b'}):
        self.x = x
    def getStuff(self, field):
        return self.x[field]

请注意,您需要参考self.x中的getStuff()

演示:

>>> class foobar:
...     def __init__(self,x={123:'a',456:'b'}):
...         self.x = x
...     def getStuff(self, field):
...         return self.x[field]
... 
>>> fb = foobar()
>>> print fb.x
{456: 'b', 123: 'a'}

请注意,使用函数关键字参数default的可变值通常是个好主意。函数参数定义为一次,并且可能导致意外错误,因为现在所有类共享相同的字典。

请参阅"Least Astonishment" and the Mutable Default Argument

答案 1 :(得分:1)

在python中定义一个必须使用的类

    class classname(parentclass):
        def __init__():
            <insert code>

使用您的代码,您声明的方法不是类

答案 2 :(得分:1)

使用

class foobar:

而不是

def foobar():