十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
类的私有属性:
创新互联是一家专注于成都网站设计、成都做网站与策划设计,嘉黎网站建设哪家好?创新互联做网站,专注于网站建设10年,网设计领域的专业建站公司;建站业务涵盖:嘉黎等地区。嘉黎做网站价格咨询:18980820575
__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 Template():
def ___haha():
pass
t=Template()
dir(t)
['_Template___haha', '__doc__', '__myodule__']
当方法以__开头后,会认为它是一个私有的方法,外部不能调用,其实是因为python帮我们改名了,如上所式的___haha方法变成了
_+类名+原方法名的形式
class MyClass: def __init__(self): print "initialize..." def __play(self): print "play..." a = MyClass()initialize... a._MyClass__play()play... dir(a)['_MyClass__play', '__doc__', '__init__', '__module__']python的私有是伪的,还是可以访问到。 方法就是_类名__方法名,python不过是在以__开头的方法名面前加了小动作导致访问不到看起来像私有方法。
一、主体不同
1、类:是面向对象程序设计实现信息封装的基础。
2、函数:是指一段在一起的、可以做某一件事儿的程序。也叫做子程序、(OOP中)方法。
二、特点不同
1、类:是一种用户定义的引用数据类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。
2、函数:分为全局函数、全局静态函数;在类中还可以定义构造函数、析构函数、拷贝构造函数、成员函数、友元函数、运算符重载函数、内联函数等。
三、规则不同
1、类:实质是一种引用数据类型,类似于byte、short、int(char)、long、float、double等基本数据类型,不同的是它是一种复杂的数据类型。
2、函数:函数必须声明后才可以被调用。调用格式为:函数名(实参)调用时函数名后的小括号中的实参必须和声明函数时的函数括号中的形参个数相同。
参考资料来源:百度百科-函数
参考资料来源:百度百科-类
class Student(object):
def __init__(self,name,score):
self.__name=name;
self.__score=score;
self.__grade=3;##这是私有的属性
self.grade=3; ##这是公有的。
def show_grade(self):
print("%s __grade=%d"% (self.__name,self.__grade));
print("%s grade=%d"% (self.__name,self.grade));
lisa=Student("lisa",88);
mona=Student("mona",82);
def set_grade(self,grade):
self.__grade = grade; ##实测发现,此函数调用后__grade 还是原值。__grade是私有变量。只能被class里的“静态方法”来修改。
self.grade = grade; ##此函数调用后,grade的值被修改了。grade是公开变量。可以被动态方法来修改。
#print("%s grade is %d"% (self.__name, self.grade));# 在这里访问不到self.__name,所以把此句注释掉了。
Student.setGrade = set_grade;
lisa.setGrade(4);
lisa.show_grade();
结果如下:
lisa __grade=3
lisa grade=4
结论:
为类动态增加的方法,对类里私有属性没有读与写的权限。