使用__init__方法

上一篇 / 下一篇  2008-03-06 18:57:53 / 个人分类:Python

)eY&X4Y-WGnZ[ ~0   __init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的初始化 。先给个简单的例子:

6f0X7HjEind I ^0

C&wJ*FXr9z0   >>> class Person:51Testing软件测试网2a3h2AxwrH
          def __init__(self, xingming):
l!zai2jn `0   ...       self.name = xingming51Testing软件测试网:l!_ dR1S(I^9C,{
          def sayHi(self):
u3s8E@ e0   ...       print 'Hello, my name is', self.name
51Testing软件测试网"Dw)m/K F.EKz!dO f?

51Testing软件测试网,Wb'["y}1XgwR1v

   >>> p = Person('Swaroop')51Testing软件测试网!l9f(J#n!~ y2bZ-[A6q
   >>> p.sayHi()

/S4[K#MYI0

BbA/\K3]4l(Y ~0   输出
fAm'p7c\A5nz0   $ python class_init.py
Ak9s0g {0   Hello, my name is Swaroop

WT4?7a*{;t&p;@&yH051Testing软件测试网&V(\2YC\;jS

    这里我们没有专门调用__init__方法,只是在创建一个类的新实例的时候,把参数包括在圆括号内跟在类名后面,从而传递给__init__方法。这是这种方法的重要之处。之后,我们就能够在我们的方法中使用self.name域。这在sayHi方法中得到了验证。

f,N2uD2G1v051Testing软件测试网+?z9B*Ed;Mj[/R

51Testing软件测试网.i)h(?6xe.hB9P
(1) 函数__init__的调用51Testing软件测试网 B4ga*GjGo(Zdn L#D
    类似C++中的构造函数,但是__init__函数不是构造函数,是类实例生成好后再调用的函数。而且在有些特殊情况下不会被调用。例如:

$S? ItL^`051Testing软件测试网 \*qx7vv:dU

    >>> class TestClass:51Testing软件测试网zI0jZ?9eC
          i = 151Testing软件测试网(\?F5a @oRs
          def __init__(self, num = 100):
@ bi/x5M8T0    ...       self.i = num51Testing软件测试网 am$k8[9o@V
    ...        
7E$gkd&Fi#l&h5FQ0    >>> a = TestClass #这里没有调用__init__函数,i仍然为1,因为a不是实例51Testing软件测试网 |Q7U/? N
    >>> a.i51Testing软件测试网+y-d eu)oG.Rh-a+L2]
    输出  151Testing软件测试网bSA2?3?;Y p

51Testing软件测试网8rYK;B^ Gz

    >>> a = TestClass() #这里调用了__init__函数,i变成100
p-f7X,b@9@-D0    >>> a.i51Testing软件测试网+`}W,t$a+p#}0p
    输出  100

v.N PFe$X8[wd e051Testing软件测试网|p;?.g5{

    由上可见,只有在类名后面加上“()”后才会调用__init__函数。51Testing软件测试网eH6s p o

-KM9ud4W"y-E%H/cK0(2) self的使用51Testing软件测试网Y9W6Yz-m
    在Python中,self不是关键词,但是确是一种强制要求的约定俗称:每个类中的成员函数的第一个参数必须为self。self跟c++中的this关键词类似,区别在于一个必须显式指定,一个是隐式包含。类中函数要使用类中的成员变量时,必须使用self来获得该类中的其他成员变量。例如:
(? j,s9lJ `0    >>> class TestClass:
p e R@SZ-`8X0           i = 1
m `|SC5o.H+d0           def __init__(self, num = 100):51Testing软件测试网/v"Oqic,R@2Lk^
    ...        i = num    #这里的i不是类的成员变量,而是__init__函数变量51Testing软件测试网A%L|}Q;]WcH
    ...    
%Wm O_;E?3\0    >>> a = TestClass()51Testing软件测试网0vW)Br#| t
    >>> a.i
)Fu(AY.ZW2i Q7wMM#}0    输出  1    #结果类的成员变量仍然为1,没有变成num值:10051Testing软件测试网Ik%Bv3p,ELp

D#U T"}AJ-Fh S0    因此,在__init__函数中只能使用self.i来使用类的成员变量i。如果类中函数不需要使用类的成员变量,则函数定义中可以省略self参数。51Testing软件测试网CS!Q8`#r"D&T0Kk
51Testing软件测试网l-[T4y(L0[


TAG: Python __init__

 

评分:0

我来说两句

日历

« 2024-04-27  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 5586
  • 日志数: 10
  • 建立时间: 2008-03-05
  • 更新时间: 2009-10-22

RSS订阅

Open Toolbar