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("不管有没有错,都执行")

 

posted @ 2018-04-08 11:04  LZ鱼乐  阅读(250)  评论(0)    收藏  举报