__private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。
在类内部的方法中使用时 self.__private_attrs。
类的方法:
在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数
类的私有方法 :
__private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。
在类的内部调用 self.__private_methods
实例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
class JustCounter:
__secretCount = 0 # 私有变量
publicCount = 0# 公开变量
def count(self):
self.__secretCount += 1
self.publicCount += 1
print self.__secretCount
counter = JustCounter()
counter.count()
counter.count()
print counter.publicCount
print counter.__secretCount # 报错,实例不能访问私有变量
Python不允许实例化的类访问私有数据,但你可以使用 object._className__attrName 访问属性,将如下代码替换以上代码的最后一行代码:
…………………….
print counter._JustCounter__secretCount
这样就可以访问私有属性了
#看你怎么理解这个私有的含义:class Person:
def __init__(self, name, gender):
self.name = name
self.gender = gender
class Student(Person):
def __init__(self, name, gender, age, snum):
super(Student, self).__init__(name, gender)
self.__age = age
self.studentnumber = snum
p = Student('Tom', 'Male', 19, 32)
print(p.gender)
print(p.__dict__)
print(p.__age)
'''
执行之后:
Male
{'name': 'Tom', 'gender': 'Male', '_Student__age': 19, 'studentnumber': 32}
Traceback (most recent call last):
File "D:\Program Files (x86)\Python 3.6.1 (64bit)\Python script practices\new_1.py", line 17, in <module>
print(p.__age)
AttributeError: 'Student' object has no attribute '__age'
这里即说明__age这个属性从外部访问来看,是没有的,从p这个属性字典key中__age属性是以_Student__age的形式体现,可以这么理解为__age是属于Student类的私有属性
当然这个所谓的私有属性,在特殊情况需要修改的时候,也是可以外部访问修改,改变访问语句即可,看个人需要吧
Python不支持私有成员。所有Python类中的成员都是公共的,可以从类外部调用或存取的。所谓成员名前加一条或两条下划线“_func”或“__member”的方式只是一种约定俗成,提示用户这个成员函数或变量只用于内部调用,不是设计给用户使用的。即使如此,用户只要想调用便可调用,无任何约束。