一. self和__init__的简单说明
Python里学习class时,最难理解的就是参数self和函数__init__。如:
# 定义类Student
class Student(object):
def __init__(self,name,score):
self.name = name #将name封装到类里面去
self.score = score
__init__像是类的构造函数,在类的实例创建后被立即调用。你可以在__init__中将变量赋值给类自己的属性变量。
Self指向类本身。可以理解为,通过self.name = name的操作,将数据封装在类里面,调用时直接通过类Student去进行调用。若不进行self.name = name的操作,类的实例无法调用name。
# 类的一个实例
example = Student('John',95)
二. class中的私有变量和特殊变量
name 公共变量,可通过类class访问
__name 私有变量,无法通过外部访问
__name__ 特殊变量,可以通过类class访问
如果希望类Student里的变量不被外部访问,在封装变量时可在变量前面加__,如self___name = name,这样就无法从外部访问私有变量name了。
若name已经是私有变量,但外部代码要获取,则可以增加定义get_name和get_score。
class Student(object):
def __init__(self,name,score):
self.__name = name
self.__score = score
def get_name(self):
return self.__name
def get_score(self):
return self.__score
若要改变私有变量,可增加定义set_name和set_score。
class Student(object):
....
def set_name(self,name):
self.__name = name
def set_score(self,score):
self.__score = score
三
. self的一些具体用法
1.self代表类的实例,而非类。
2.编写类时不写self会报错,显示函数应该有零个变量而你给了一个。
3.在继承时,使用的数据是传入实例的数据,而非定义self的父类的数据。
参考资料:1.《深入Python: Dive into Python中文版》第五章 http://www.kuqin.com/docs/diveintopythonzh-cn-5.4b/html/object_oriented_framework/defining_classes.html#d0e11854
2.https://blog.csdn.net/CLHugh/article/details/75000104