python当中关于_单下划线和__双下线的区别
在python当中遇到“_”单下划线和“__”双下线。那么他们之间的区别在哪呢?
- “_”:单前置下划线,私有化属性和方法,类对象和子类可以访问。
- “__”: 双前置下划线,私有化属性和方法,外部和子类不可以访问。当然外部其实还是可以访问到的。
详细说明:
- 1. xx,在类当中,属于公有属性或者方法,类的外部和内部都可以直接访问。
- 2. _xx,单前置下划线,私有化属性和方法,类对象和子类是可以访问,访问方式需要对象._变量名调用。
具体如下:
class Person(object): def __init__(self,name,age): self._name = name self._age = age
# 是Person类的子类 class Student(Person): def __init__(self,name,age): super().__init__(name,age) p= Person('bruce',19) # 对象._属性 可以调用 print(p._name) # bruce print(p._age) # 19 # print(p.name) # error stu = Student('小王',27) print(stu._name) # 小王 print(stu._age) # 27 print(stu.name) # error
- 3. __xx,双前置下划线,无法在外部直接访问,同时无法被子类所继承调用。
class Person(object): def __init__(self,name,age): self.__name = name self.__age = age class Student(Person): def __init__(self,name,age): super().__init__(name,age) p= Person('bruce',19) # print(p.__name) # error # print(p._Person.__name) # error stu = Student("小王",29) print(stu._Person.__name) #error print(stu.__name) # error