我是靠谱客的博主 光亮含羞草,这篇文章主要介绍MIT 6.00.1X (9)(10) object,现在分享给大家,希望可以做个参考。

对象(object):

对象意味着:1. 一系列数据属性

                   2. 一套访问和操作这些数据的方法


定义一个类的例子:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Class_name(object): #约定类的名称,首字母大写,括号号里的objcet是父类的名称,若没有则不写 def __init__(self, x, y): ''' 初始化属性x,y ''' self.y = y self.x = x def getX(self): return x def getY(self): return y w1 = Clasee_name(1,2) #创建一个Class_name的实例


特殊操作:

e.g.




复制代码
1
2
3
4
5
6
7
8
9
class Clock(object): def __init__(self, time): self.time = time def print_time(self): print(self.time) boston_clock = Clock('5:30') paris_clock = boston_clock paris_clock.time = '10:30' boston_clock.print_time()

最后 输出的 是 10:30  

因为boston_clock and paris_clock 是一个对象的两个名字,就是他们都是一个对象了。This is called aliasing.







getter 和setter:

getter:用在class外去获得class的数据属性  (虽然可以直接获取,但是professor强调 必须要这么干)

setter:用在class外去改变class的数据属性












继承: 在初始化的时候 可以用  

复制代码
1
2
Animal.__init__(self,age)

也可以用:

复制代码
1
super().__init__(age)
这个super函数调用就指代了 父类的名称    (注意 super 的时候没有self 而用animal的时候 有self)


可以调用 eric.age_diff(john)

也可以调用 Person.age_diff(john,eric)  效果是一样的


多个超类:初始化 和 方法 继承顺序是不同的

(初始化):

初始化 看的是这个子类的初始化是什么顺序

比如下面的例子, 下面的例子D,他有两个超类C,B  在D的初始化里 他先运行C的初始化 再运行B的初始化 所以如果C,B 初始化有重叠, B将覆盖C的值 所以   D.a 的值应该是  B里面a的值

(方法):

当一个类具有多个超类的时候, 排在前面的超类的方法 将覆盖位于后面的超类 ,

也就是说我们先看排在第一个超类的   方法 ,如果没找到 再看后面的。 所以对于D来说  C B 都有方法 y  但是继承的是C的方法y

e.g.

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class A(object): def __init__(self): self.a = 1 def x(self): print("A.x") def y(self): print("A.y") def z(self): print("A.z") class B(A): def __init__(self): A.__init__(self) self.a = 2 self.b = 3 def y(self): print("B.y") def z(self): print("B.z") class C(object): def __init__(self): self.a = 4 self.c = 5 def y(self): print("C.y") def z(self): print("C.z") class D(C, B): def __init__(self): C.__init__(self) B.__init__(self) self.d = 6 def z(self): print("D.z")

实例的变量和类的变量:

类的变量定义在class 里面 但是在class所有方法外面,包括__init__ 外面。 

1. 实例属性属于各个实例所有,互不干扰;

2. 类属性属于类所有,所有实例共享一个属性;

3. 即使在类内部 要调用 类变量  也要用 类名.变量名    如Rabbit.tag

4.不要对实例属性和类属性使用相同的名字 因为相同名称的实例属性将屏蔽掉类属性,但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性。

如下图:




class 变量的作用:









生成器的意义:


最后

以上就是光亮含羞草最近收集整理的关于MIT 6.00.1X (9)(10) object的全部内容,更多相关MIT内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(80)

评论列表共有 0 条评论

立即
投稿
返回
顶部