Python--__init__方法

一、说明

__init__方法用来为对象定制自己独有的特征

二、示例代码如下

 1 class LuffyStudent():
 2     school = 'luffycity'
 3 
 4     def __init__(self, name, sex, age):
 5         self.Name = name
 6         self.Sex = sex
 7         self.Age = age
 8 
 9     def learn(self):
10         print('is learning')
11 
12     def eat(self):
13         print('is eating')
14 
15     def sleep(self):
16         print('is sleeping')

产生对象代码如下:

1 stu1 = LuffyStudent('王一丫', '', 18)  # 相当于LuffyStudent.__init__(stu1,'王一丫','女',18)

加上__init__方法后,类示例化的步骤如下:

1、先产生一个空对象,stu1

2、LuffyStudent.__init__(stu1,'王一丫','女',18)

查看stu1的名称空间:

1 print(stu1.__dict__)

结果如下:

{'Name': '王一丫', 'Sex': '女', 'Age': 18}

这就显示为对象定制了自己独有的特征

 

三、查看对象的数据属性,代码如下:

1 print(stu1.Name)
2 print(stu1.Sex)
3 print(stu1.Age)

结果如下:

王一丫

18

四、更改对象的数据属性,代码如下:

1 stu1.Name = '李一丫'
2 print(stu1.Name)

结果如下:

李一丫

五、删除对象的数据属性,代码如下:

1 del stu1.Name
2 print(stu1.__dict__)

结果如下:

{'Sex': '女', 'Age': 18}

六、增加对象的数据属性,代码如下:

1 stu1.class_name = 'python开发'
2 print(stu1.__dict__)

结果如下:

{'Sex': '女', 'Age': 18, 'class_name': 'python开发'}

 

七、属性查找

首先查看产生的每个对象的名称空间,示例代码如下:

 1 class LuffyStudent():
 2     school = 'luffycity'
 3 
 4     def __init__(self, name, sex, age):
 5         self.Name = name
 6         self.Sex = sex
 7         self.Age = age
 8 
 9     def learn(self):
10         print('is learning')
11 
12     def eat(self):
13         print('is eating')
14 
15     def sleep(self):
16         print('is sleeping')
17 
18 stu1 = LuffyStudent('王一丫', '', 18)
19 stu2 = LuffyStudent('王二丫', '', 28)
20 stu3 = LuffyStudent('王三丫', '', 38)
21 
22 print(stu1.__dict__)
23 print(stu2.__dict__)
24 print(stu3.__dict__)

结果如下:

{'Name': '王一丫', 'Sex': '女', 'Age': 18}
{'Name': '王二丫', 'Sex': '男', 'Age': 28}
{'Name': '王三丫', 'Sex': '男', 'Age': 38}

类中的数据属性: 是所有对象共有的

示例代码如下:

1 print(LuffyStudent.school)
2 print(stu1.school)
3 print(stu2.school)
4 print(stu3.school)

结果如下:

luffycity
luffycity
luffycity
luffycity

都能够访问类中的数据属性,school

1 print(LuffyStudent.school, id(LuffyStudent.school))
2 print(stu1.school, id(stu1.school))
3 print(stu2.school, id(stu2.school))
4 print(stu3.school, id(stu3.school))

结果:

luffycity 3016506040048
luffycity 3016506040048
luffycity 3016506040048
luffycity 3016506040048

从以上结果可以看出,访问的是同一块内存地址

八、类中的函数属性:是绑定给对象,绑定到不同的对象是使用不同的绑定方法

从以下代码和结果可以看出,代码如下:

1 print(LuffyStudent.learn)
2 print(stu1.learn)
3 print(stu2.learn)
4 print(stu3.learn)

结果如下:

<function LuffyStudent.learn at 0x000001764D5DB730>
<bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x000001764D5DE160>>
<bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x000001764D5DE1D0>>
<bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x000001764D5DE208>>

1     def learn(self):
2         print('%s is learning' % self.Name)
3 
4 LuffyStudent.learn(stu1)
5 LuffyStudent.learn(stu2)
6 LuffyStudent.learn(stu3)

以上代码输出结果为:

王一丫 is learning
王二丫 is learning
王三丫 is learning

会自动把对象自身传入

稍作更改代码后如下所示:

1     def learn(self, x):
2         print('%s is learning %s' % (self.Name, x))
3 
4 stu1.learn(1)
5 stu2.learn(2)
6 stu3.learn(3)

结果如下:

王一丫 is learning 1
王二丫 is learning 2
王三丫 is learning 3

属性查找范围,会先从从类中查找,然后又从父类中查找,依次往上查找,但不会从全局变量中查找,代码验证如下:

1 LuffyStudent.x = 'from Luffycity class'
2 print(stu1.__dict__)
3 print(stu1.x)

验证结果:

{'Name': '王一丫', 'Sex': '女', 'Age': 18}
from Luffycity class

把1 LuffyStudent.x = 'from Luffycity class' 这行代码注释后,

再执行就会报错,AttributeError: 'LuffyStudent' object has no attribute 'x'

 

posted @ 2018-03-14 23:28  xudachen  阅读(1544)  评论(0编辑  收藏  举报