Python 类的 self

self

    self只有在类的方法中才会有,独立的函数和方法里面是没有的,在定义类的时候 python 是强制声明 self 的,不过在实例化以后调用时能够不用传入相应的参数,self 不是 python 的关键字,只是约定俗成的,把 self 换成别的也是能够的。python

    self 是指类实例对象自己,不是类自己,即类实例化以后的对象。数据结构

    高级语言的类相似于 C 语言的结构体,C 语言的结构体定义了特定的数据结构,而高级语言的类则在结构体上更进了一步,将函数的功能也放了进去,也就是动态的数据结构,固然跟结构体同样,声明的时候自己是不会建立内存空间的,结构体只有在声明给变量以后才会在内存中建立实际地址,类也是同样的,须要实例化才对应实际的内存空间。函数

 

Class

    因为类是抽象的模板,那么就能够在建立实例的时候,把必须绑定的属性强制加入其中,Python 提供一个特殊的 __init__ 方法,在建立实例的时候,把须要的属性添加进去。spa

class Student(object):
    
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def print_age(self):
        print('%s :%s' % (self.name, self.age))

    这样在实例化的时候,就须要传入 name 和 age 两个属性了code

b = student('Alan', 24)

     有了 __init__ 方法,在建立实例的时候,就不能传入空的参数了,必须传入与 __init__ 方法匹配的参数,但 self 不须要传,Python解释器本身会把实例变量传进去,在类中定义的函数只有一点不一样,就是第一个参数永远是实例变量 self,可是在调用的时候,不用传入 self 参数。对象

 

数据封装

    面向对象语言中,有一个特定是数据封装,例如上面的 student 类中,后续实例化的实例中都会拥有 name 和 age 两个数据,就能够经过外部函数来访问这些数据了:内存

def print_age(std):
    print('%s :%s' % (std.name, std.age)

bart = student('Alan', 24)
print_age(bart)

    既然 student 实例自己拥有这些数据,那么想要访问这些数据,就没有必要在外部声明函数来访问,能够直接在 student 内部定义访问数据的函数,这样就把数据“封装”起来了,这些封装数据的函数和 student 类自己是关联起来的,称之为类的方法----不一样于 C 语言结构体的地方,C 语言的结构体并无把数据封装起来。it

相关文章
相关标签/搜索