MIT 6.00.1X (9)(10) object

对象(object):

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

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


定义一个类的例子:

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的实例

MIT 6.00.1X (9)(10) object_第1张图片

特殊操作:

MIT 6.00.1X (9)(10) object_第2张图片

e.g.

MIT 6.00.1X (9)(10) object_第3张图片



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.


MIT 6.00.1X (9)(10) object_第4张图片


MIT 6.00.1X (9)(10) object_第5张图片



getter 和setter:

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

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


MIT 6.00.1X (9)(10) object_第6张图片



MIT 6.00.1X (9)(10) object_第7张图片


MIT 6.00.1X (9)(10) object_第8张图片



MIT 6.00.1X (9)(10) object_第9张图片


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

Animal.__init__(self,age)

也可以用:

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

MIT 6.00.1X (9)(10) object_第10张图片

可以调用 eric.age_diff(john)

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

MIT 6.00.1X (9)(10) object_第11张图片

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

(初始化):

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

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

(方法):

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

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

e.g.

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

如下图:

MIT 6.00.1X (9)(10) object_第12张图片

MIT 6.00.1X (9)(10) object_第13张图片


class 变量的作用:

MIT 6.00.1X (9)(10) object_第14张图片


MIT 6.00.1X (9)(10) object_第15张图片



MIT 6.00.1X (9)(10) object_第16张图片

MIT 6.00.1X (9)(10) object_第17张图片


生成器的意义:

MIT 6.00.1X (9)(10) object_第18张图片

你可能感兴趣的:(学习笔记,python,MIT,6.00.1.X,学习笔记)