类的变量和对象的变量
来源:互联网 发布:java线程join方法 编辑:程序博客网 时间:2024/06/05 10:19
有两种类型的 域 ——类的变量和对象的变量,它们根据是类还是对象 拥有 这个变量而区分。
类的变量 由一个类的所有对象(实例)共享使用。只有一个类变量的拷贝,所以当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。
对象的变量 由类的每个对象/实例拥有。因此每个对象有自己对这个域的一份拷贝,即它们不是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称,但是是互不相关的。通过一个例子会使这个易于理解。
程序
------------------------------------------------------------------------------------------------------
#!/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.sayHi()
swaroop.howMany()
--------------------------------------------------------------------------------------------------------
输出
--------------------------------------------------------------------------------------------------------
$ python objvar.py
(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.
Hi, my name is Swaroop.
We have 2 persons here.
Abdul Kalam says bye.
There are still 1 people left.
Swaroop says bye.
I am the last one.
--------------------------------------------------------------------------------------------------------
这里,population属于Person类,因此是一个类的变量。name变量使用self赋值,因此是对象的变量。
__init__方法用一个名字来初始化Person实例。在这个方法中,我们让population增加1,这是因为我们增加了一个人。同样可以发现,self.name的值根据每个对象指定,这表明了它作为对象的变量的本质。
记住,你只能使用self变量来参考同一个对象的变量和方法。这被称为 属性参考 。
在这个程序中,我们还看到docstring对于类和方法同样有用。我们可以在运行时使用Person.__doc__和Person.sayHi.__doc__来分别访问类与方法的文档字符串。
有一个特殊的方法__del__,它在对象消逝的时候被调用。这就是python类的析构函数。当对象不再被使用,它所占用的内存将返回给系统。在这个方法里面,我们只是简单地把Person.population减1。
当对象不再被使用时,__del__方法运行,但是很难保证这个方法究竟在 什么时候 运行。如果你想要指明它的运行,你就得使用del语句。
Python中所有的类成员(包括数据成员)都是 公共的 。
只有一个例外:如果你使用的数据成员名称以 双下划线前缀 比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。
这样就有一个惯例,如果某个变量只想在类或对象中使用,就应该以单下划线前缀。而其他的名称都将作为公共的,可以被其他类/对象使用。记住这只是一个惯例,并不是Python所要求的(与双下划线前缀不同)。(这里有问题)
- 类的变量和对象的变量
- 类的变量和对象的变量
- python类变量和对象变量的解释
- jsp的变量和对象
- 类的成员变量,对象,静态变量
- 对象变量和类变量
- Java 对象和对象变量的问题
- Python的构造函数和析构函数 对象的变量和类的变量不一样
- 面向对象_成员变量和局部变量的区别
- 面向对象_静态变量和成员变量的区别
- 面向对象成员变量和局部变量的区别
- 类变量和实例变量的区别
- Python的类变量和实例变量
- Python的类变量和实例变量
- Python的类变量和实例变量
- python的类变量和实例变量
- python的类变量和成员变量
- 类变量和实例变量的区别
- linux 查看依赖库
- java 使用sourceforge.pinyin4j查询汉字拼音
- 黑马程序员-- .Net学习日记——c#面向对象-方法
- Oracle数据库system用户忘记了密码怎么办?
- sqlite破解
- 类的变量和对象的变量
- SqlServer2008 jdbc 连接所需jar和代码示例
- 关于在循环中使用UITextView的问题
- plsql设置自动替换
- web应用设置统一友好错误页面,处理404,500等错误
- protocol buffer简单使用
- char码值对应列表大全
- wince多线程上使用FindWindow可能导致死锁
- 黑马程序员-- .Net学习日记——c#笔记