python 类中的私有属性有哪些

Python012

python 类中的私有属性有哪些,第1张

类的私有属性

__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”的方式只是一种约定俗成,提示用户这个成员函数或变量只用于内部调用,不是设计给用户使用的。即使如此,用户只要想调用便可调用,无任何约束。