1、python学习笔记模块几个模块相关的规则: 一个文件代表一个模块。 可以用import module导入模块,也可以用form module import member导入模块的成员。 如果导入的是module,必须使用module.member进行访问;如果导入的member,可以直接访问member。 导入的module或member都会变成当前module的member。b.py1 # coding=utf-82 3 print _name_4 5 def say_b():6 print ba.py1 # coding=utf-82 3 import b4 from b import
2、*5 6 print _name_7 8 def say_a():9 print atest.py1 # coding=utf-82 3 import a4 5 print _name_6 7 a.say_a();8 a.say_b();9 a.b.say_b()输出1 b2 a3 _main_4 a5 b6 b异常管理 1 # coding=utf-8 2 3 # 自定义异常 4 class HappyException(Exception): 5 pass 6 7 # 引发和捕获异常 8 try: 9 raise HappyException10 except:11 print(Happy
3、Exception)12 13 try:14 raise HappyException()15 except:16 print(HappyException)17 18 # 捕获多种异常19 try:20 raise HappyException21 except (HappyException, TypeError):22 print(HappyException)23 24 # 重新引发异常25 try:26 try:27 raise HappyException28 except (HappyException, TypeError):29 raise30 except:31 print
4、(HappyException)32 33 #访问异常实例34 try:35 raise HappyException(都是我的错)36 except (HappyException, TypeError), e:37 print(e)38 39 #按类型捕获40 try:41 raise HappyException42 except HappyException:43 print(HappyException)44 except TypeError:45 print(TypeError)46 47 #全面捕获48 try:49 raise HappyException50 except:5
5、1 print(HappyException)52 53 #没有异常的else54 try:55 pass56 except:57 print(HappyException)58 else:59 print(没有异常)60 61 #总会执行的final62 try:63 pass64 except:65 print(HappyException)66 else:67 print(没有异常)68 finally:69 print(总会执行)面向对象先上一张图几个规则:1. 一切都是对象,python中一切都是对象,每个对象都包含一个_class_属性以标记其所属类型。2. 每个对象(记得一切都是
6、对象啊)都包含一个_dict_属性以存储所有属性和方法。3. 每个类型都包含一个_bases_属性以标记其父类。4. 属性和方法的访问规则:依次搜索instance、子类、父类、父类的父类、直到object的_dict_,如果找到就返回。5. 属性和方法的设置规则:直接设置instance._dict_。6. 以上属性和方法访问或设置规则没有考虑“魔法方法”,下文会解释。示例 1 # coding=utf-8 2 3 _metaclass_ = type 4 5 # 类型定义 6 # 实例方法必的第一个参数代表类型实例,类似其他语言的this。 7 class Animal: 8 name =
7、 未知 # 属性定义。 9 10 def _init_(self, name): #构造方法定义。11 self.name = name12 13 def getName(self): # 实例方法定义。14 return self.name15 16 def setName(self, value):17 self.name = value18 19 print(Animal.name) # 未知20 print(Animal._dict_name) # 未知21 22 animal = Animal(狗狗)23 print(animal.name) # 狗狗24 print(animal.
8、_dict_name) # 狗狗25 print(Animal.name) # 未知26 print(Animal._dict_name) # 未知27 print(animal._class_.name) # 未知28 print(animal._class_._dict_name) # 未知1 # 类型定义中的代码会执行,是一个独立的作用域。2 class TestClass:3 print(类型定义中) #类型定义中绑定方法和未绑定方法 1 class TestClass: 2 def method(self): 3 print(测试方法) 4 5 test = TestClass()
9、6 print(TestClass.method) # 7 print(test.method) #bound method TestClass.method of 8 9 TestClass.method(test) #测试方法10 test.method() #测试方法绑定方法已经绑定了对象示例,调用的时刻不用也不能传入self参数了。注:使用对象访问实例方法为何会返回绑定方法?这个还得等到学完“魔法方法”才能解释,内部其实是拦截对方法成员的访问,返回了一个Callable对象。私有成员1 # 私有成员2 class TestClass:3 _private_property = 14 5
10、 def _private_method():6 pass7 8 print(TestClass._dict_) # _module_: _main_, _TestClass_private_method: , _TestClass_private_property: 1难怪访问不了了,名称已经被修改了,增加了访问的难度而已。多重继承 1 #多重继承 2 class Base1: 3 pass 4 5 class Base2: 6 pass 7 8 class Child(Base2, Base1): 9 pass10 11 child = Child()12 print(isinstance
11、(child, Child) # True13 print(isinstance(child, Base2) # True14 print(isinstance(child, Base1) # True如果继承的多个类型之间有重名的成员,左侧的基类优先级要高,上例子Base2会胜出。接口那里去了,鸭子类型比接口更好用。 1 class TestClass1: 2 def say(self): 3 print(我是鸭子1) 4 5 class TestClass2: 6 def say(self): 7 print(我是鸭子2) 8 9 def duck_say(duck):10 duck.sa
12、y()11 12 duck_say(TestClass1() # 我是鸭子113 duck_say(TestClass2() # 我是鸭子2调用父类 1 # 调用父类 2 class Base: 3 def say(self): 4 print(Base) 5 6 class Child(Base): 7 def say(self): 8 Base.say(self) 9 super(Child, self).say()10 print(Child)11 12 child = Child()13 child.say()魔法方法详细内容参考:对象构造相关:_new_、_init_、_del_。
13、1 from os.path import join 2 3 class FileObject: 4 Wrapper for file objects to make sure the file gets closed on deletion. 5 6 def _init_(self, filepath=, filename=sample.txt): 7 # open a file filename in filepath in read and write mode 8 self.file = open(join(filepath, filename), r+) 9 10 def _del_
14、(self):11 self.file.close()12 del self.file运算符重载:所有运算符都能重载。 1 class Word(str): 2 Class for words, defining comparison based on word length. 3 4 def _new_(cls, word): 5 # Note that we have to use _new_. This is because str is an immutable 6 # type, so we have to initialize it early (at creation) 7 if
15、 in word: 8 print Value contains spaces. Truncating to first space. 9 word = word:word.index( ) # Word is now all chars before first space10 return str._new_(cls, word)11 12 def _gt_(self, other):13 return len(self) len(other)14 15 def _lt_(self, other):16 return len(self) = len(other)20 21 def _le_
16、(self, other):22 return len(self) Word(wei)属性访问。 1 class AccessCounter: 2 A class that contains a value and implements an access counter. 3 The counter increments each time the value is changed. 4 5 def _init_(self, value): 6 super(AccessCounter, self)._setattr_(counter, 0) 7 super(AccessCounter, se
17、lf)._setattr_(value, value) 8 9 def _setattr_(self, name, value):10 if name = value:11 super(AccessCounter, self)._setattr_(counter, self.counter + 1)12 # Make this unconditional.13 # If you want to prevent other attributes to be set, raise AttributeError(name)14 super(AccessCounter, self)._setattr_
18、(name, value)15 16 def _delattr_(self, name):17 if name = value:18 super(AccessCounter, self)._setattr_(counter, self.counter + 1)19 super(AccessCounter, self)._delattr_(name)集合实现。 1 class FunctionalList: 2 A class wrapping a list with some extra functional magic, like head, 3 tail, init, last, drop
19、, and take. 4 5 def _init_(self, values=None): 6 if values is None: 7 self.values = 8 else: 9 self.values = values10 11 def _len_(self):12 return len(self.values)13 14 def _getitem_(self, key):15 # if key is of invalid type or value, the list values will raise the error16 return self.valueskey17 18
20、def _setitem_(self, key, value):19 self.valueskey = value20 21 def _delitem_(self, key):22 del self.valueskey23 24 def _iter_(self):25 return iter(self.values)26 27 def _reversed_(self):28 return FunctionalList(reversed(self.values)29 30 def append(self, value):31 self.values.append(value)32 def hea
21、d(self):33 # get the first element34 return self.values035 def tail(self):36 # get all elements after the first37 return self.values1:38 def init(self):39 # get elements up to the last40 return self.values:-141 def last(self):42 # get last element43 return self.values-144 def drop(self, n):45 # get
22、all elements except first n46 return self.valuesn:47 def take(self, n):48 # get first n elements49 return self.values:n可调用对象,像方法一样调用对象。 1 class Entity: 2 Class to represent an entity. Callable to update the entitys position. 3 4 def _init_(self, size, x, y): 5 self.x, self.y = x, y 6 self.size = siz
23、e 7 8 def _call_(self, x, y): 9 Change the position of the entity.10 self.x, self.y = x, y11 print(x, y)12 13 entity = Entity(5, 1, 1)14 entity(2, 2)资源管理 1 class Closer: 2 def _enter_(self): 3 return self 4 5 def _exit_(self, exception_type, exception_val, trace): 6 print(清理完成) 7 return True; 8 9 wi
24、th Closer() as closer:10 pass对象描述符。 1 class Meter(object): 2 Descriptor for a meter. 3 4 def _init_(self, value=0.0): 5 self.value = float(value) 6 def _get_(self, instance, owner): 7 return self.value 8 def _set_(self, instance, value): 9 self.value = float(value)10 11 class Foot(object):12 Descrip
25、tor for a foot.13 14 def _get_(self, instance, owner):15 return instance.meter * 3.280816 def _set_(self, instance, value):17 instance.meter = float(value) / 3.280818 19 class Distance(object):20 Class to represent distance holding two descriptors for feet and21 meters.22 meter = Meter()23 foot = Fo
26、ot()Mixin(也叫掺入)掺入模块:playable.py1 # coding=utf-82 3 def paly(self):4 print(游戏中.)掺入目标模块:test.py1 # coding=utf-82 3 class Animal:4 from playable import paly5 6 animal = Animal()7 animal.paly() # 游戏中.Open Class(打开类型,从新定义成员) 1 #coding:utf-8 2 3 class TestClass: 4 def method1(self): 5 print(方法1) 6 7 def m
27、ethod2(self): 8 print(方法2) 9 10 TestClass.method2 = method211 12 test = TestClass()13 test.method1() # 方法114 test.method2() # 方法2Meta Programming(元编程)1 TestClass = type(TestClass, (object,), 2 say: lambda self : print(你好啊)3 )4 5 test = TestClass()6 test.say() 1 def getter(name): 2 def getterMethod(s
28、elf): 3 return self._getattribute_(name) 4 return getterMethod 5 6 def setter(name): 7 def setterMethod(self, value): 8 self._setattr_(name, value) 9 return setterMethod 10 11 class TestClass:12 getName = getter(name)13 setName = setter(name)14 15 test = TestClass()16 test.setName(段光伟)17 print(test.getName()
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2