python杂记

python杂记

python面向对象之类变量与对象变量

  • 类变量(Class Variable)是共享的(Shared)——它们可以被属于该类的所有实例访问。该类变量只拥有一个副本,当任何一个对象对类变量作出改变时,发生的变动将在其它所有实例中都会得到体现。
  • 对象变量(Object variable)由类的每一个独立的对象或实例所拥有。在这种情况下,每个对象都拥有属于它自己的字段的副本,也就是说,它们不会被共享,也不会以任何方式与其它不同实例中的相同名称的字段产生关联。
# coding=UTF-8

class Robot:
    """表示一个带有名字的机器人"""

    #记录机器人的数量
    population = 0

    def __init__(self, name):
        "初始化数据"
        self.name = name
        print("(Initializing {})".format(self.name))
        #创建一个机器人人口加1
        Robot.population += 1

    def die(self):
        "我挂了"
        print("{} is being destoryed!".format(self.name))

        Robot.population -= 1

        if Robot.population == 0:
            print("{} was the last one.".format(self.name))
        else:
            print("There are still {:d} robots working.".format(Robot.population))

    def say_hi(self):
        """来自机器人的问候

        没问题你做得到。"""
        print("Gretings, my masters call me {}".format(self.name))

    @classmethod
    def how_many(cls):
        "打印当前的人口数量"
        print("We have {:d} robots.".format(cls.population))

droid1 = Robot("aaa")
droid1.say_hi()
Robot.how_many()

droid2 = Robot("bbb")
droid2.say_hi()
Robot.how_many()

print("\nRobots can do some work here.\n")

print("Robot have finished their work. So let's destory them.")
droid1.die()
droid2.die()

Robot.how_many()

population 属于Robot类,因此它是一个类变量。 name变量属于一个对象(通过使用self 分配),因此它是一个对象变量。因此,我们通过Robot.population而非self.population引用population类变量。我们对于name对象变量采用self.name标记法加以称呼,这是这个对象中所具有的方法。要记住这个类变量与对象变量之间的简单区别。
除了Robot.popluation ,我们还可以使用self.class.population ,因为每个对象都通过self.class 属性来引用它的类。how_many实际上是一个属于类而非属于对象的方法。这就意味着我们可以将它定义为一个classmethod(类方法)或是一个staticmethod(静态方法) ,这取决于我们是否需要知道这一方法属于哪个类。由于我们已经引用了一个类变量,因此我们使用classmethod(类方法) 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值