python的面向对象
PYTHON是一种面向对象的编程语言,间接支持多态,支持多继承。说几点自己的体会吧:
1、python中的面向对象语法比较简洁,对比分明。
如:构造函数,其它语言都是用一个public classname来做,而python中是使用 def __init__(self):来进行。而且私有的方法,也是在方法名前边加“__”(两个下划线),这种方式比较简洁,对比分明,程序可读性好。
2、python不能直接支持多态,但能通过其它方式,间接支持。
@staticmethod
def animal_talk(obj):
obj.talk()
3、python直接支持多继承,这个是很多语言不具备的。
而且python中有新式类、经典类的区分,在新式类中,多继承时,构造方法广度优先。如:

1 class A: 2 def __init__(self): 3 print("A") 4 class B(A): 5 pass 6 # def __init__(self): 7 # print("B") 8 class C(A): 9 pass 10 # def __init__(self): 11 # print("C") 12 class D(B,C): 13 pass 14 # def __init__(self): 15 # print("D") 16 obj=d(); #执行结果 是“A” 17 class A: 18 pass 19 # def __init__(self): 20 # print("A") 21 class B(A): 22 def __init__(self): 23 print("B") 24 class C(A): 25 def __init__(self): 26 print("C") 27 class D(B,C): 28 pass 29 # def __init__(self): 30 # print("D") 31 obj = D() #执行结果是“B”
4、多态: 接口重用, 一种接口,多种实现
5、静态方法 如system os 等模块中的方法。一般用类名加方法名来调用。
6、类方法 只能访问类变量,不能访问实例变量
7、属性方法, 把一个方法变成一个静态属性。例如:
class Animal(object): __cp='china' def __init__(self,name,sex): self.name=name self.sex=sex @classmethod #类方法,只能访问类变量,不能访问实例变量。 def change(self,gj): self.__cp=gj @staticmethod #静态方法,常用于模块中的方法。 def talk(obj): obj.talk() def saymore(self): print (''' %s is %s is %s '''%(self.name,self.sex,self.__cp)) @property #属性方法,将方法用属性表示。 def moreinfo(self): if self.sex=='m': print ("%s is 男性"%self.name) else: print ("%s is 女性"%self.name) class Dog(Animal): def talk(self): print ('%s is wang wang'%self.name) class Cat(Animal): def talk(self): print ("%s is miao miao"%self.name) d=Dog('jack','m') c=Cat('tom','w') Animal.talk(d) Animal.talk(c) d.change("japan") d.saymore() d.moreinfo c.moreinfo 运行结果: jack is wang wang tom is miao miao jack is m is japan jack is 男性 tom is 女性
另外python中的反射也比较好理解。
例如:
1 class Dog(object): 2 def __init__(self,name,age): 3 self.name=name 4 self.age=age 5 def eat(self,food): 6 print("%s is eating"%self.name,food) 7 def bulk(self): 8 print("%s is bulk"%self.name) 9 d1=Dog("Jack",11) 10 choice=input(">>>") 11 if hasattr(d1,choice): 12 func1=getattr(d1,choice) 13 func1("apple") 14 else: 15 setattr(d1,choice,bulk) 16 getattr(d1,choice)(d1) 17 delattr(d1,choice) 18 # 笔记: 19 # hasattr(o,name_str):判断在对象O中,有没有一个名叫name_str的变量或方法。 20 # getattr(o,name_str):获取对象O中,名叫name_str的变量或方法的内存地址。 21 # setattr(object,name_str,value):为对象object添加一个名为name_str的属性、方法,其地址为value 22 # delattr(o,name_str):将对象O中,名为name_str的变量或方法删除。
最后,在这一部分还练习了python中的异常处理,与其它程序语言没有什么区别,语法都也差不多。
1 try: 2 open("tes.txt") #尝试执行的代码。也可以用raise主动触发异常。 3 except (KeyError,IndexError) as e : #针对具体情况,进行处理。 4 print("没有这个key",e) 5 except Exception as e: #针对没有预料的情况进行处理。 6 print("未知错误",e) 7 else: #如果没有出错。 8 print("一切正常") 9 finally: 10 print("不管有没有错,都执行")