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


特殊操作:

e.g.




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的数据属性












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

Animal.__init__(self,age)

也可以用:

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.

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 变量的作用:









生成器的意义:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值