python学习中对类和对象中变量理解

参考: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    :已双下划线开头即为私有变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值