当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 7 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 初学python,类和对象有点不明白,请教了.
帖子发表于 : 2008-02-28 9:41 

注册: 2007-11-29 19:47
帖子: 1
送出感谢: 0 次
接收感谢: 0 次
初学python ,看简明python教程,有一点不明白,这是教程中的一段代码,红色是我添加的,不太明白为什么会这样,谁能讲一下.书中说:"类的变量 由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。",可我修改了swaroop.population ,为什么不影响呢howmany()呢,显示还是原来的?
#!/usr/bin/python
# Filename: objvar.py

class Person:
'''Represents a person.'''
population = 0

def __init__(self, name):
'''Initializes the person's data.'''
self.name = name
print '(Initializing %s)' % self.name

# When this person is created, he/she
# adds to the population
Person.population += 1

def __del__(self):
'''I am dying.'''
print '%s says bye.' % self.name

Person.population -= 1

if Person.population == 0:
print 'I am the last one.'
else:
print 'There are still %d people left.' % Person.population

def sayHi(self):
'''Greeting by the person.

Really, that's all it does.'''
print 'Hi, my name is %s.' % self.name

def howMany(self):
'''Prints the current population.'''
if Person.population == 1:
print 'I am the only person here.'
else:
print 'We have %d persons here.' % Person.population

swaroop = Person('Swaroop')
swaroop.sayHi()
swaroop.howMany()

kalam = Person('Abdul Kalam')
kalam.sayHi()
kalam.howMany()

swaroop.population +=5
print swaroop.population


swaroop.sayHi()
swaroop.howMany()

print swaroop.population


执行结果:
(Initializing Swaroop)
Hi, my name is Swaroop.
I am the only person here.
(Initializing Abdul Kalam)
Hi, my name is Abdul Kalam.
We have 2 persons here.
7
Hi, my name is Swaroop.
We have 2 persons here.
7
Abdul Kalam says bye.
There are still 1 people left.
Swaroop says bye.
I am the last one.


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-03-03 9:14 

注册: 2007-05-11 16:11
帖子: 7
送出感谢: 0 次
接收感谢: 0 次
没有缩进看起来真痛苦


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-03-03 12:48 
头像

注册: 2005-08-25 13:58
帖子: 808
地址: ustc
送出感谢: 0 次
接收感谢: 0 次
应该用 Person.population +=5


_________________
爱喝真猪奶茶的夜鸣猪


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2008-03-28 1:47 

注册: 2008-03-26 12:19
帖子: 140
送出感谢: 0 次
接收感谢: 0 次
shhcy2 写道:
没有缩进看起来真痛苦


是啊,看惯了缩进,看这些有些累.


_________________
买笔记本电脑,衬衫网站,dhc化妆品,卓越网购书


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-04-02 21:51 
头像

注册: 2007-09-10 20:20
帖子: 1352
地址: 南京
系统: Debian
送出感谢: 0 次
接收感谢: 0 次
skyrose 写道:
shhcy2 写道:
没有缩进看起来真痛苦


是啊,看惯了缩进,看这些有些累.


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 初学python,类和对象有点不明白,请教了.
帖子发表于 : 2008-09-20 2:27 

注册: 2008-09-19 23:55
帖子: 6
送出感谢: 0 次
接收感谢: 0 次
lylcwj 写道:
初学python ,看简明python教程,有一点不明白,这是教程中的一段代码,红色是我添加的,不太明白为什么会这样,谁能讲一下.书中说:"类的变量 由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。",可我修改了swaroop.population ,为什么不影响呢howmany()呢,显示还是原来的?
#!/usr/bin/python
# Filename: objvar.py

class Person:
'''Represents a person.'''
population = 0

def __init__(self, name):
'''Initializes the person's data.'''
self.name = name
print '(Initializing %s)' % self.name

# When this person is created, he/she
# adds to the population
Person.population += 1

def __del__(self):
'''I am dying.'''
print '%s says bye.' % self.name

Person.population -= 1

if Person.population == 0:
print 'I am the last one.'
else:
print 'There are still %d people left.' % Person.population

def sayHi(self):
'''Greeting by the person.

Really, that's all it does.'''
print 'Hi, my name is %s.' % self.name

def howMany(self):
'''Prints the current population.'''
if Person.population == 1:
print 'I am the only person here.'
else:
print 'We have %d persons here.' % Person.population

swaroop = Person('Swaroop')
swaroop.sayHi()
swaroop.howMany()

kalam = Person('Abdul Kalam')
kalam.sayHi()
kalam.howMany()

swaroop.population +=5
print swaroop.population


swaroop.sayHi()
swaroop.howMany()

print swaroop.population


执行结果:
(Initializing Swaroop)
Hi, my name is Swaroop.
I am the only person here.
(Initializing Abdul Kalam)
Hi, my name is Abdul Kalam.
We have 2 persons here.
7
Hi, my name is Swaroop.
We have 2 persons here.
7
Abdul Kalam says bye.
There are still 1 people left.
Swaroop says bye.
I am the last one.

对象是改不了类变量的值的!改的只是属于它的,所以就是你看到的那种结果


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 初学python,类和对象有点不明白,请教了.
帖子发表于 : 2008-09-23 13:01 
头像

注册: 2006-04-12 18:54
帖子: 4669
送出感谢: 0 次
接收感谢: 7
没有缩进的python代码更本不是人看得-_____-

找了下原文。

楼主看看原文中是怎么用的

代码:
        Person.population += 1


这里面的Person是什么呢?是类的名字吧?。就是说, Person[object]这个东西的pupulation属性+1。

然后,让我们定义一个 叫Tom的Person对象.

代码:
       tom=Person()


然后,让我们看看tom和Person的关系。

很明显,tom是 Person这个函数(其实是Person类的构建函数)的一个返回值(我们称之为Person__init__)。

Tom[Person__init__]很明显和 Person[object]没有直接关系。

原始代码里是设置Person 这个object的popultation的值

而你设置的是Tom这个 Person__init__值,当然没有直接联系了,都不是一个层次的东西啊。





最后,关于你代码的正确写法,应该是

代码:
      Person.population +=5


_________________
blog:杰林修·呓


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 7 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译