python-面向对象进阶

小总结:

     面向对象的好处

       更容易扩展,提高代码的使用效率,使代码组织性更强、更清晰,更适合复杂项目的开发

       封装:把功能的实现细节封装起来,之暴露调用接口

       多态:接口的继承

       定义:

             类  :  模板

             对象 :  实例化的类

             属性:私有属性 __private  

                     公有属性   存在类中的变量

                      成员属性   实例变量

             方法 :函数

             构造函数:

           析构函数:实例被销毁(手动删除变量或者程序结束),调用析构函数

           新式类VS经典类:

                  新式类:继承路径:广度优先  

                  经典类:继承路径:深度优先

 

一、抽象接口:                         

 1 class Alert(object):
 2     '''报警类'''
 3     def send(self):
 4         raise NotImplementedError
 5 class MailAlert(Alert):
 6     def send(self,msg):
 7         print('_____sending:',msg)
 8 class SMSAlert:
 9     pass
10 m=MailAlert()
11 m.send('ooooooooooooooooo')

 

二、类方法:

     类方法只能访问类的公有属性,不能访问成员属性和私有属性

 1 class Person(object):
 2     id='11111111111111111'
 3     def __init__(self,name):
 4         self.name=name
 5     @staticmethod
 6     def eat(name):
 7         print('%s is eating...'%name)
 8     @classmethod
 9     def h(self):
10         print('%s'%(self.id))
11 #不需要实例化直接通过类调用
12 Person.eat('eeeeeeeeeee')
13 p=Person('song')   #类方法只能调用公有属性,不嗯给你调用成员属性和私有属性
14 p.h()

    静态方法既不能访问公有属性也不能访问实例属性

 

三、属性方法

      把一个方法变成一个变量

 1 class Person(object):
 2     id='11111111111111111'
 3     def __init__(self,name):
 4         self.name=name
 5     @property
 6     def talk(self):
 7         print('%s say'%self.name)
 8 p=Person('songxiaonan')
 9 # p.talk()   #报错
10 p.talk  #  songxiaonan say

      给属性方法变成变量后,给这个变量附一个值    @talk.setter

 1 class Person(object):
 2     id='11111111111111111'
 3     def __init__(self,name):
 4         self.name=name
 5     @property
 6     def talk(self):
 7         print('%s say'%self.name)
 8     @talk.setter
 9     def talk(self,msg):
10         print('talk %s'%msg)
11 p=Person('songxiaonan')
12 # p.talk()   #报错
13 p.talk  #  songxiaonan say     p.talk调用的是第一个talk
14 p.talk='ahahhahhahahaha'    #talk ahahhahhahahaha    p.talk=值  就是调用的第二个talk

      删除变量   @talk.deleter

 1 class Person(object):
 2     id='11111111111111111'
 3     def __init__(self,name):
 4         self.name=name
 5     @property
 6     def talk(self):
 7         print('%s say'%self.name)
 8     @talk.setter
 9     def talk(self,msg):
10         print('talk %s'%msg)
11     @talk.deleter
12     def talk(self,msg):
13         print('delete.....')
   del p.talk

 

四、类的其他特殊方法

 1 class Animal(object):
 2     country='BeiJing'
 3     def __init__(self,name,age):
 4         self.name=name
 5         self.age=age
 6     def __str__(self):    #   定制实例的返回结果
 7         return '%s——%s'%(self.name,self.age)
 8 
 9 A = Animal('CAT', '12')
10 print(A.__dict__)    #   打印实例的属性   {'name': 'CAT', 'age': '12'}
11 print(A.__module__)  #   打印实例所在的模块    __main__
12 print(A.__class__)   #   打印实例所在的类   <class '__main__.Animal'>
13 print(A)  #  CAT——12

 

                   

 

posted @ 2016-12-08 13:45  3456425171  阅读(143)  评论(0编辑  收藏  举报