|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 醉酒青牛 于 2015-11-17 18:44 编辑
小牛有话说:
各位鱼油,大家好。我是小牛,如果您已经看完或者正在看鱼神的《零基础入门学习Python》视频,想随时复习前面的知识点却又不想花太多时间和精力重翻视频,来这里《零基础入门Python学习》整理瞅瞅小牛呕心做的的视频内容的总结吧^_^,如果觉得有用的话,可以点击所属淘贴右上角的“订阅”按钮,这样以后就能够随时看到小牛做的最新的整理了。
年底恰逢各种项目结题,近两周内没有时间和精力更新帖子,这里对关注小牛帖子鱼油们说声抱歉了,后面小牛会尽力加快更新速度,争取在11月份更完类和对象部分。
本期主要内容导读:
这一期我们归纳一下鱼神第三十九讲“类和对象:拾遗”。这一期里面鱼神主要是介绍了Python组合机制及类的属性和方法重名问题以及类定义、类对象和类实例化对象的区别及联系以及最后的绑定概念。下面我们就来详细介绍一下各个知识点吧~~~~~~
1. Python的组合机制
Python里面类之间的关系可以是纵向关系,采用继承机制可以将基类里面的属性和方法全部被子类使用,而父类却不可以使用子类的方法和属性,例如鱼和鲨鱼、鲤鱼三文鱼之间的关系等;当然类之间也可以是横向关系,可以通过实例化一个类的对象来作为另一类的属性来实现类之间的调用关系,例如池塘和池塘内的鱼和乌龟之间的关系等,举例说明:
>>> class Turtle:
def __init__(self,x):
self.x = x
>>> class Fish:
def __init__(self,y):
self.y = y
>>> class Pool:
def __init__(self,x,y):
self.turtle = Turtle(x) #将Turtle类实例化的对象turtle作为类Pool实例化对象的属性
self.fish = Fish(y) #将Fish类实例化的对象fish作为类Pool实例化对象的属性
def printnum(self):
print('池塘内的乌龟有%d 只,小鱼有 %d 条!' %(self.turtle.x,self.fish.y))
>>> pool = Pool(2,10)
>>> pool.printnum()
池塘内的乌龟有 2 只,小鱼有 10 条!
2.类内属性和方法重名问题
如果再Python中一个类内定义的属性和方法重名,则属性会覆盖方法,举例说明:
>>> class CC:
def x(self): #定义方法x
print('X-man')
>>> cc = CC()
>>> cc.x()
X-man
>>> cc.x =10 #定义属性x,将会把同名方法覆盖掉
>>> cc.x
10
>>> cc.x() #同名方法已经不存在
Traceback (most recent call last):
File "<pyshell#44>", line 1, in <module>
cc.x()
TypeError: 'int' object is not callable
为了避免上述情况发生,一方面不要在类内定义太多的方法和属性;另一方面方法和属性名可以根据词性来分别开,例如一个矩形类的属性可以是长、宽,而方法可以是获得长度,获得宽度等。
3. 类定义,类对象和类实例化对象的区别和联系
在Python中我们必须通过class定义一个类,类定义完之后就是一个类对象,而通过类对象实例化之后的对象称之为类实例化对象。一般类内定义的方法和属性都是静态的,其作用域为全局作用域;而类的实例化对象中的方法和属性是动态的。举例说明:
>>> class DD:
count = 0
>>> a = DD()
>>> b = DD()
>>> c = DD()
>>> DD.count
0
>>> a.count
0
>>> b.count
0
>>> c.count
0
>>> c.count += 10
>>> c.count
10
>>> DD.count
0
>>> a.count
0
>>> b.count
0
>>> DD.count += 100
>>> DD.count
100
>>> a.count
100
>>> b.count
100
>>> c.count
10
这里面类似函数中变量的作用域一样,在函数体外定义的变量为全局作用域,而函数体内定义的变量为局部作用域,函数体内可以直接使用全局变量,但是如果在函数体内重新定义了和全局变量名一样的变量,则此变量与全局变量就分开了。
4. Python中绑定的概念
Python严格要求方法需要有实例才能被调用,这种限制就是Python中的绑定概念。具体表现在类的方法定义时,必须包含一个self参数,这样类的实例化对象在调用方法时会将自身作为self参数的实参带入进去。为了说明类对象和实例化对象中属性之间的关系,我们使用__dict__函数来给出类中除了莫法方法和某些特殊方法之外的所有的属性和方法,举例说明:
>>> class C:
def set_xy(self,x,y):
self.x = x
self.y = y
def print_xy(self):
print(self.x,self.y)
>>> a = C()
>>> C.__dict__
mappingproxy({'print_xy': <function C.print_xy at 0x0244DC00>, '__weakref__': <attribute '__weakref__' of 'C' objects>, '__module__': '__main__', '__doc__': None, '__dict__': <attribute '__dict__' of 'C' objects>, 'set_xy': <function C.set_xy at 0x0244DBB8>})
>>> a.__dict__
{}
>>> a.set_xy(2,3)
>>> a.__dict__
{'x': 2, 'y': 3}
>>> C.__dict__
mappingproxy({'print_xy': <function C.print_xy at 0x0244DC00>, '__weakref__': <attribute '__weakref__' of 'C' objects>, '__module__': '__main__', '__doc__': None, '__dict__': <attribute '__dict__' of 'C' objects>, 'set_xy': <function C.set_xy at 0x0244DBB8>})
>>> del C
>>> a.__dict__
{'x': 2, 'y': 3}
>>> a.print_xy()
2 3
|
评分
-
查看全部评分
|