Python 私有属性

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 作者:Presley
# 邮箱:1209989516@qq.com
# 时间:2018-08-05
# 类的方法
class Animal:
    def __init__(self,name):
        self.name = name
        self.__num = None
    count = 10
    hobbie = "wohaoshuai"

    @classmethod #将下面方法变成只能通过类方式去调用而不能通过实例方式去调用。因此调用方法为:Animal.talk(). !!!!类方法,不能调用实例变量
    def talk(self):
        print("{0} is talking...".format(self.hobbie))#因为hobbie为类变量所以可以通过类方式或者实例方式,若括号中为self.name实例变量则只能通过Animal.talk()方式调用

    @staticmethod #当加上静态方法后,此方法中就无法访问实例变量和类变量了,相当于把类当作工具箱,和类没有太大关系
    def walk():
        print("%s is walking...")

    @property #属性,当加了property后habit就变成一个属性了就不再是一个方法了,调用时不用再加()
    def habit(self): #习惯
        print("%s habit is xxoo" %(self.name))

    @property
    def total_players(self):
        return  self.__num

    @total_players.setter
    def total_players(self,num):
        self.__num = num
        print("total players:",self.__num)

    @total_players.deleter
    def total_players(self):
        print("total player got deleted.")
        del self.num
#@classmethod
# Animal.hobbie
# Animal.talk()
# d = Animal("wohaoshuai")
# d.talk()


# @staticmethod
# d = Animal("wohaoshuai2")
# d.walk()

# @property
d = Animal("wohaoshuai3")
# d.habit
print(d.total_players)
d.total_players = 2

#del d.total_players
d.__num = 9#相当于在外面设置了一个属性__num,和实例中的__num没有任何瓜葛。
#print("OUT:%s" %(d.__num))#报错,提示没有__num属性
#如果非要访问,可用以下方法
print("OUT:%s" %(d._Animal__num))

print(d.total_players)

 

posted @ 2018-10-21 19:05  Presley  阅读(174)  评论(0编辑  收藏  举报