参考:A Byte of Python3(中文版)
对象可以理解为是类的实例
类的变量由一个类的所有对象(实例共同使用)(对比java可以理解为是java中的static修饰全局变量)
只有一个类变量的拷贝,所以 当某个对象对类的变量做了改动的时候,这个改动会反映到所有其他的实例上。
对象的变量由类的每个对象/实例拥有(对比java中的变量)
因此每个对象有自己对这个域的一份拷 贝,即它们不是共享的,在同一个类的不同实例中,虽然对象的变量有相同的名称, 但是是互不相关的
class Demo:
num= 0
def __init__(self,name):
self.name=name
print('(Init {0})'.format(self.name))
Demo.num += 1
def __del__(self):
print('{0} is being destroyed!'.format(self.name))
Demo.num -=1
if Demo.num== 0:
print('{0} was the last one.'.format(self.name))
else:
print('There are still {0:d} num working'.format(Demo.num))
def sayHi(self):
print('Greetings,my master call me {0}'.format(self.name))
def howMany():
print('We have {0:d} demo.'.format(Demo.num))
howMany = staticmethod(howMany)
droid1 = Demo('雷锋')
droid1.sayHi()
Demo.howMany()
droid2 = Demo('雷锋他弟')
droid2.sayHi()
Demo.howMany()
print('\nDemo can do some work here.\n')
print("Demohave finished their work. So let's destory them.\n")
del droid1
del droid2
Demo.howMany()
参考:A Byte of Python3(中文版)
注:1、使用Demo.num来引用num类变量,而不是用self.num来引用。在该对象的方法中用 self.name 来引用对象变量 name
2、一个与类变量有相同名字的对象变量会隐藏类变量!
3、howMany 实际上是属于类而不是对象的方法。这意味着我们或者可以定义类方 法或者可以定义静态方法,这取决于我们是否需要知道我们是那个类的部分。既然我 们不需要这样的信息,就需要将其定义为静态方法。
也可通过如下方式定义:
@staticmethod
def howMany()
Python 中所有的类成员(包括数据成员)都是公共的,所有的方法都是有效的
定义私有变量__var :已双下划线开头即为私有变量