美文网首页
再谈类定义

再谈类定义

作者: cloveses | 来源:发表于2018-08-25 16:40 被阅读0次

    上文中定义了一个包含一个构造方法和四个实例属性的类MyLine。对于Python中的类,还有其他相关的概念需要我们了解。

    Python中实例属性包含实例变量和实例方法。

    1.实例变量的定义

    作为动态语言,Python中的类不要求预先定义实例变量,实例变量赋值即视为定义,你也可以在类的其他普通方法中定义和使用实例变量。请看如下交互式环境下运行的代码:

    
    >>> class Foo:
    
             def__init__(self,x):
    
                       self.x= x
    
             deftesta(self,y):
    
                       self.y= y
    
             defgetxy(self):
    
                       print(self.x,self.y)
    
    >>> f = Foo(3)
    
    >>> f.getxy()
    
    Traceback (most recent call last):
    
      File"", line 1, in
    
       f.getxy()
    
      File"", line 9, in getxy
    
       print(self.x,self.y)
    
    AttributeError: 'Foo' object has noattribute 'y'
    
    >>> f.testa(9)
    
    >>> f.getxy()
    
    3 9
    
    

    第一次调用f.getxy()时,试图使用实例变量y,Python给出的错误信息很明确,此时,Foo对象的实例f还不具有实例变量y。当执行完f.testa(9)时,实际上就是运行了方法中的语句self.y = 9,这时,通过赋值即定义的形式使f这个实例具有了y这个实例变量。所以,再次调用f.getxy()时,成功地输出了x和y的属性值。

    一般情况下,实例变量尽量在类的构造方法中定义和赋值,如果能保证其实例变量是在使用前被定义和赋值,则也可以在一般方法中定义实例变量,实现的方法可以是在构造方法中调用定义实例变量的一般方法一次。

    2.实例方法的定义

    通过上文中的代码,也可以看出一般实例方法的定义和构造方法定义形式是类似的,只不过方法名称不使用双下划线了。

    一般方法的定义时,第一个参数也是self,用于对实例自身的引用,其他参数可以和面向过程的函数一样,由用户根据实际需求定义。但需要说明的是,在使用类实例去调用普通的实例方法时,self这个参数是不用提供的,由Python自动传入。

    相关文章

      网友评论

          本文标题:再谈类定义

          本文链接:https://www.haomeiwen.com/subject/veegiftx.html