概述
对象(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 变量的作用:
生成器的意义:
最后
以上就是光亮含羞草为你收集整理的MIT 6.00.1X (9)(10) object的全部内容,希望文章能够帮你解决MIT 6.00.1X (9)(10) object所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复