再谈类定义

2018-08-25  本文已影响0人  cloveses

上文中定义了一个包含一个构造方法和四个实例属性的类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自动传入。

上一篇下一篇

猜你喜欢

热点阅读