为了账号安全,请及时绑定邮箱和手机立即绑定

关于私有属性调用问题

class Person(object):


    __count = 0

    @classmethod

    def how_many(cls):

        return cls.__count

    def __init__(self,name):

        self.name=name

        Person.__count+=1


print Person.how_many()


p1 = Person('Bob')


print Person.how_many()

print p1.how_many()


代码如上:

我在最后加了一行 print p1.how_many()

结果依旧可以运行   让我非常费解,不是说使用__count私有属性代替count可以提高安全性让外部不可访问,只能类方法调用么,可是实际情况却是实例p1调用how_many()方法也与print Person.how_many()并无二致,这是为什么,祈盼大神大牛们解惑,不胜感激

正在回答

2 回答

how_many是一个类方法!而p1是在类的基础上产生的!所以P1调用类里面的方法是可以的!


2 回复 有任何疑惑可以回复我~
#1

君往何方 提问者

那怎样构建一段代码体现实际应用场景的__count与count的不同呢,前者外部不可访问的特点 确实学的有点懵,问的问题可能也很白痴,还望大神不吝赐教
2016-12-14 回复 有任何疑惑可以回复我~
#2

慕粉2335491420 回复 君往何方 提问者

__count是个内部变量,代码中通过方法how_many返回值获取__count的内容!Person 和p1 一个是类,一个是类的实例,均可以访问类里面的方法! 通过类的方法返回类里面的内部变量。在类外返回的应该叫方法的返回值,而不应该叫类的内部变量!
2016-12-14 回复 有任何疑惑可以回复我~
#3

夜70 回复 慕粉2335491420

那如果how_many是实例方法是不是就不能从外部调用__count了?
2017-02-13 回复 有任何疑惑可以回复我~

print Person.how_many()可以返回值获取__count的内容,

print Person.__count会报错

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

关于私有属性调用问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信