写在最前面
最近在看深度学习,避免不了要看python代码。但是之前的python基础有点薄弱。代码中很多的函数的变量都有一个self,对这个方面有一些疑惑。
-
首先解释这个self的作用:
self的作用就相当于一个全局变量,加上self后,在程序中任何一个实例方法都可以调用访问这个变量。 -
python中下划线的作用
在代码中还有很多下划线的变量。在Python中,变量名以_ _ xx_ _定义的变量是特殊变量,前后都有两个下划线的话,是特殊变量,但不是私有变量,不同的构造函数是可以直接访问的。
但是如果是变量的前面只有一个_ xxxxx那么这个变量就是一个私有变量了。无法从外部访问以一个下划线开头的变量了。只能在这个函数中使用。 -
关于__init__函数
这个函数是python的内置函数,用于对创建的对象属性进行初始化。这个内置函数的默认的第一个参数就是self。如创建一个Student类,让后
就可以通过Student类创建出Student的实例,创建实例是通过类名+()实现:
student=Student();
但是这样就是创建类的实例。类的属性都没有赋值。
对这个Student初始化。
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
student=Studeng("往往","98")
在类中定义了__init__函数后,可以这样进行实例,这样就把类中的属性进行赋值了。
注意:
(1)__init __方法的第一参数永远是self,表示创建的类实例本身,因此,在__init __方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身。
(2)有了__init __方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init __方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去:
和普通数相比,在类中定义函数只有一点不同,就是第一参数永远是类的本身实例变量 self,并且调用时,不用传递该参数。除此之外,类的方法(函数)和普通函数没啥区别,你既可以用默认参数、可变参数或者关键字参数(args是可变参数,args接收的是一个tuple,kw是关键字参数,kw接收的是一个dict)。