简述:面向对象介绍、特性、方法、反射、异常处理。
一、面向对象介绍:
Object-Oriented Programming(OOP)是利用“类“和“对象”来创建各种实例,使用面向对象可以使程序变得可扩展and易维护,减少重复代码提高开发效率。
核心特性:class 类、object 对象、Encapsulation 封装、Inheritance 继承、Polymorphism 多态。
1 class Dog(object): #新式类加object 2 def __init__(self,name,age): #__init__()为构造方法 3 self.name = name 4 self.age = age 5 6 def bark(self): 7 print("hello,I am a dog, my name is ",self.name) 8 9 d = Dog("京巴",2) #实例化一个狗,其实就是以Dog类为模版,在内存里开辟一块空间,存上数据,赋值成一个变量名 10 d.bark() #调用
1 class Dog(object): 2 def __init__(self,name): 3 self.name = name 4 5 def bark(self): 6 print("I am %s" %self.name) 7 8 def __del__(self): 9 '''析构方法''' 10 pass#释放实例时执行 11 12 class SmallDog(Dog):#继承父类Dog 13 def __init__(self,name,age):#构造自己方法 14 super(SmallDog,self).__init__(name)#继承父类方法 15 self.age = age 16 17 def eat(self): 18 print("I am %s, and my age is %s" %(self.name,self.age)) 19 20 d1 = SmallDog("jingba",2) 21 d1.eat()
1 class Animal(object): 2 def __init__(self,name): 3 self.name = name 4 def bark(self): 5 print("I am %s" %self.name) 6 class Dog(Animal): 7 def bark(self): 8 print("%s: 旺旺" %self.name) 9 class Cat(Animal): 10 def bark(self): 11 print("%s: 喵喵" %self.name) 12 def fun(obj): 13 obj.bark() 14 d1 = Dog("jingba") 15 c1 = Cat("mao") 16 fun(d1) 17 fun(c1)
二、静态方法
通过@staticmethod使普通方法变为静态方法,普通方法可以通过实例化后直接调用,并且在方法里可以通过self调用实例或类变量,但静态方法不能访问实例变量或类变量,简单说就是与类无关,只是调用需要通过类名。
1 class Dog(object): 2 def __init__(self,name): 3 self.name = name 4 #@staticmethod 5 def bark(self): 6 print("I am %s" %self.name) 7 d1 = Dog("狗") 8 d1.bark() 9 10 class Dog(object): 11 def __init__(self,name): 12 self.name = name 13 @staticmethod 14 def bark(self): 15 print("I am %s" %self.name) 16 d1 = Dog("狗") 17 d1.bark(d1) #通过实例本身传可调用:d1 18 19 class Dog(object): 20 def __init__(self,name): 21 self.name = name 22 @staticmethod 23 def bark(): #去掉self,下面self.name不可调用 24 print("I am barking" ) 25 d1 = Dog("狗") 26 d1.bark()
三、类方法
通过@classmethod使普通方法变为类方法,类方法访问不了实例变量,只能访问类变量
1 class Dog(object): 2 def __init__(self,name): 3 self.name = name 4 @classmethod 5 def bark(self): 6 print("I am %s" %self.name) #访问不了实例变量,报错 7 d1 = Dog("狗") 8 d1.bark() 9 10 class Dog(object): 11 name = "类dog" #类变量定义 12 def __init__(self,name): 13 self.name = name 14 @classmethod 15 def bark(self): 16 print("I am %s" %self.name) 17 d1 = Dog("狗") 18 d1.bark()
四、属性方法
通过@property把一个方法变成一个静态属性,调用时不用加()调用,直接调用即可
1 class Dog(object): 2 def __init__(self,name): 3 self.name = name 4 #@property 5 def bark(self): 6 print("I am %s" %self.name) 7 d1 = Dog("jingba") 8 d1.bark() 9 10 class Dog(object): 11 def __init__(self, name): 12 self.name = name 13 @property #加上静态属性 14 def bark(self): 15 print("I am %s" % self.name) 16 d1 = Dog("jingba") 17 d1.bark #调用时要去掉()
五、类的特殊方法
1 class Dog(object): 2 """描述狗的信息""" 3 def __init__(self,name): 4 self.name = name 5 print(Dog.__doc__) 6 7 #输出:描述狗的信息
1 class dog(object): 2 def __init__(self,name,age): 3 self.name = name 4 self.age = age 5 d1 = dog("jingba",2) 6 print(d1.__dict__)#打印d1的所有成员 7 8 #输出:{'name': 'jingba', 'age': 2}
六、反射
1 class dog(object): 2 def __init__(self,name): 3 self.name = name 4 def bark(self): 5 return "bark" 6 d1 = dog("jingba") 7 print(hasattr(d1,"name")) #检查是否有成员 8 print(hasattr(d1,"bark")) 9 print(getattr(d1,"name")) #有则获取该成员 10 print(getattr(d1,"bark")) 11 setattr(d1,"name","cat") #设置成员 12 print(getattr(d1,"name")) 13 delattr(d1,"name") #删除成员 14 print(hasattr(d1,"name")) 15 16 #输出: 17 True 18 True 19 jingba 20 <bound method dog.bark of <__main__.dog object at 0x03832830>> 21 cat 22 False
七、动态导入
1 import importlib 2 importlib.import_module("dongtai.h") 3 4 #dongtai.h为同级目录dongtai下的h.py文件
八、异常处理
1 dic = {'k1':'v1'} 2 try: 3 dic['k20'] #代码 4 except KeyError as e: #指定错误类型 5 print(e) 6 except Exception as e:#万能异常 7 print(e)
1 try: 2 # 主代码块 3 pass 4 except KeyError as e: 5 # 异常时,执行该块 6 pass 7 else: 8 # 主代码块执行完,执行该块 9 pass 10 finally: 11 # 无论异常与否,最终执行该块 12 pass
1 class SpecialException(Exception): 2 def __init__(self, msg): 3 self.message = msg 4 def __str__(self): 5 return self.message 6 7 try: 8 raise SpecialException('我的异常') #主动触发 9 except SpecialException as e: 10 print(e)