Python语法中容易混淆的地方-类属性/实例属性/公有变量/私

2017-09-09  本文已影响0人  ztfdeveloper

容易混淆的地方#

通过name mangling(名字重整(目的就是以防子类意外重写基类的方法或者属性)如:_Class__object)机制就可以访问private了。

公有变量

#coding=utf-8
class Person(object):
    address = '北京' #类属性
    def __init__(self, new_name):
        self.name = new_name #实例属性

p = Person('Tom')
print(Person.address) #打印类属性
print(p.name) #打印实例属性

私有变量

私有变量_x

Person.py中定义_age = 18,然后终端中输入iPython3打开命令交互模式,调用Person.py中的_age会出现崩溃.

私有变量调用崩溃

但是在命令交互模式通过import Person调用就不会出现崩溃

私有变量调用不崩溃

因为通过import Person是把Person导入,在调用时是通过Person来调用的,不是外部调用

_x总结

私有变量__x

class Person(object):
    def __init__(self, new_name):
        self.__name = new_name
    #set方法设置__name
    def set_name(self, new_name):
        self.__name = new_name
    #get方法获取__name
    def get_name(self):
        return self.__name

p = Person()
print(p.get_name()) #通过get_name方法返回__name,打印实例属性__name
#print(p.__name) #直接调用__name会崩溃

也可以通过property来实现,不做解释

可以看到_Person__age就是Python自动转化的

魔法对象或属性

他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的。

不要去尝试的方式

我的博客

上一篇下一篇

猜你喜欢

热点阅读