既然Python是面向对象的语言,自然是支持类的定义的。现在就动手,来定义我们的第一个类:
记得吗?Python是以缩进来界定代码块的位置,而不是靠‘{’之类的符号。
class MyClass:
"A simple example class"
i = 12345 #this is a field
def __init__(self):
self.perInstVar = 'a'
def f(self):
return 'hello world'
x = MyClass()
print x.f()
我们可以看到下面几点:
【1】 class的documentation comment是类似javadoc的东西
【2】 class包含data field和member function。 其中i是class variable,就是static的变量。而__init__()内部定义的是per instance variable。 __init__()是个特殊的函数,会在对象被构造的时候被调用。
【3】单行注释的写法
【4】member function的第一个参数一定是self,类似java里的this。这个需要显示传入,和java/c++是不一样的
【5】 可以看到class的初始化和调用方式
bleem1998 回复于:2005-06-02 09:20:27
应该是self.i = 12345
否则i就是一个全局对象了
sakulagi 回复于:2005-06-02 10:33:55
不需要写self.,否则会出错的。
wolfg 回复于:2005-06-02 10:48:04
不加self,就是shared class data,有点像Java的static变量
加了self,就是per-instance data,也就是实例变量了
class MyClass:
"A simple example class"
i = 12345 # shared class data
def __init__(self, value):
self.name = value # per-instance data
def f(self):
return 'Hello, ' + self.name
print MyClass.i
x = MyClass('wolfg')
print x.f()
print MyClass.f(x) # also can call as class method
bleem1998 回复于:2005-06-02 11:10:04
那怎样定义一个只属于自己的变量呢?
wolfg 回复于:2005-06-02 11:24:25
引用:原帖由 "bleem1998"]那怎样定义一个只属于自己的变量呢? 发表:
什么叫做“只属于自己的变量”呢?
bleem1998 回复于:2005-06-02 11:31:30
>;>;>; class ZZZ:
... i=[]
... def f(self):
... self.i.append(0)
...
>;>;>; a=ZZZ()
>;>;>; b=ZZZ()
>;>;>; a.f()
>;>;>; b.i
[0]
>;>;>; a.f()
>;>;>; b.i
[0, 0]
>;>;>;
修改b.i时a.i也变了
他们实际是同一个对象
如何定义i才可以让a、b都拥有自己的i呢?
sakulagi 回复于:2005-06-02 13:20:43
我修改了一下帖子里的例子,这次清楚了一些
pupilzeng 回复于:2005-06-02 13:23:59
引用:原帖由 "bleem1998" 发表: 修改b.i时a.i也变了
他们实际是同一个对象
如何定义i才可以让a、b都拥有自己的i呢?
这是因为本来i就是属于这个class,所以所有这个class的instance都是共享这个i的。
如果要使用属于每个instance的变量,则在__init__中创建
self.i=12345
bleem1998 回复于:2005-06-02 13:29:08
明白了
多谢
|