python中初始化实例属性
2024-08-26 05:57:08
虽然我们可以自由地给一个实例绑定各种属性,但是,现实世界中,一种类型的实例应该拥有相同名字的属性。例如,Person类应该在创建的时候就拥有 name、gender 和 birth 属性,怎么办?
在定义 Person 类时,可以为Person类添加一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:
class Person(object):
def __init__(self, name, gender, birth):
self.name = name
self.gender = gender
self.birth = birth
__init__() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何区别。
相应地,创建实例时,就必须要提供除 self 以外的参数:
xiaoming = Person('Xiao Ming', 'Male', '1991-1-1')
xiaohong = Person('Xiao Hong', 'Female', '1992-2-2')
有了__init__()方法,每个Person实例在创建时,都会有 name、gender 和 birth 这3个属性,并且,被赋予不同的属性值,访问属性使用.操作符:
print xiaoming.name
# 输出 'Xiao Ming'
print xiaohong.birth
# 输出 '1992-2-2'
要特别注意的是,初学者定义__init__()方法常常忘记了 self 参数:
>>> class Person(object):
... def __init__(name, gender, birth):
... pass
...
>>> xiaoming = Person('Xiao Ming', 'Male', '1990-1-1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __init__() takes exactly 3 arguments (4 given)
这会导致创建失败或运行不正常,因为第一个参数name被Python解释器传入了实例的引用,从而导致整个方法的调用参数位置全部没有对上。
示例:
定义Person类的__init__方法,除了接受 name、gender 和 birth 外,还可接受任意关键字参数,并把他们都作为属性赋值给实例。
class Person(object):
def __init__(self,name,gender,birth,**kw):
self.name=name
self.gender=gender
self.birth=birth
self.kw=kw
xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student')
print xiaoming.name
print xiaoming.kw
结果:
Xiao Ming
{'job': 'Student'}
最新文章
- WIN7系统下U盘安装Ubuntu双系统
- 解决 MySQL Cluster 通过 某一个MySqld节点新建表时,其他 MySqld节点 看不到表内容的问题
- redmine一键安装包下载链接
- 基本event封装:阻止冒泡、默认事件等
- Windows Phone开发(2):竖立自信,初试锋茫
- 最长非降子序列的O(n^2)解法
- java中 this 的三种用法
- Socket实现断线重连
- Poj1258 Agri-Net (最小生成树 Prim算法 模板题)
- VM下载安装
- c/c++本地时间获取
- Storm的DRPC
- iOS 开发笔记-NSURLConnection的使用
- 设置 IntelliJ IDEA 的彩色代码主题
- Java线程基础知识(状态、共享与协作)
- 静态编译opencv3.4.0
- 设计神器 - 摹客设计系统上线了 | 晒出你的设计规范,赢iPad Pro!
- P3592 [POI2015]MYJ
- Python+Selenium UI自动化测试环境搭建及使用
- ROS + Caffe 机器人操作系统框架和深度学习框架笔记 (機器人控制與人工智能)