博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 类的 self
阅读量:6969 次
发布时间:2019-06-27

本文共 1203 字,大约阅读时间需要 4 分钟。

hot3.png

self

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

    self 是指类实例对象本身,不是类本身,即类实例化之后的对象。

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

 

Class

    由于类是抽象的模板,那么就可以在创建实例的时候,把必须绑定的属性强制加入其中,Python 提供一个特殊的 __init__ 方法,在创建实例的时候,把需要的属性添加进去。

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 两个属性了

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 语言的结构体并没有把数据封装起来。

转载于:https://my.oschina.net/u/2470065/blog/823064

你可能感兴趣的文章
多线程 NSCondition线程同步(消费者等待工厂制作完成,工厂发消息)
查看>>
python 冒泡排序加入判断
查看>>
WEB+NFS+DNS的搭建
查看>>
SQL Server2008导出数据生成文件
查看>>
Symfony2出现加载WEB调试工具栏错误
查看>>
shell 信号捕捉处理
查看>>
基于虚拟主机的FTP配置
查看>>
分享一个iptables防火墙的脚本和防御ddos***的脚本
查看>>
服务器生成文件后,客户端直接响应下载
查看>>
域控之间角色转换(BDC转换为PDC)
查看>>
passwd修改用户密码
查看>>
启用Windows2012R2 重复数据删除服务 的血泪史!
查看>>
mysql安装
查看>>
从强化学习到深度强化学习(上)
查看>>
Shell重定向&>file、2>&1、1>&2的区别
查看>>
windows server CMD命令汇总 不断更新中
查看>>
PPPOE基本配置
查看>>
.ASM实例的SGA ,查看所有ASM文件大小
查看>>
U盘通用PE安装CentOS
查看>>
如何杀掉(kill)Oracle中的会话(Session)
查看>>