Python_day5:面向对象

简述:面向对象介绍、特性、方法、反射、异常处理。

一、面向对象介绍:

  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() #调用
class类
 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()
staticmethod

三、类方法

  通过@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()
classmethod

 四、属性方法

  通过@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 #调用时要去掉()
property

五、类的特殊方法

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
hasattr,getattr,setattr,delattr

七、动态导入

1 import importlib
2 importlib.import_module("dongtai.h")
3 
4 #dongtai.h为同级目录dongtai下的h.py文件
importlib

八、异常处理

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)
try:except
 1 try:
 2     # 主代码块
 3     pass
 4 except KeyError as e:
 5     # 异常时,执行该块
 6     pass
 7 else:
 8     # 主代码块执行完,执行该块
 9     pass
10 finally:
11     # 无论异常与否,最终执行该块
12     pass
try,except,else,finally
 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)
SpecialException

猜你喜欢

转载自www.cnblogs.com/alpari-wang/p/9885075.html