码迷,mamicode.com
首页 > 编程语言 > 详细

Python之面向对象

时间:2017-10-06 00:03:12      阅读:393      评论:0      收藏:0      [点我收藏+]

标签:设计   基本   oca   opp   http   多态   9.png   school   基本使用   

1》面向对象编程(Object-Oriented Programming):
  对于编程语言的初学者而言,OOP不是一个很容易理解的编程方式,OPP的三大特性有继承,封装,多态,OOP也使得我们对代码的修改和扩展变得更容易;
     封装:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或对象操作,对不可信的进行信息隐藏;
     继承:可以使用现有类的所有功能,并在无须重新编写原来的类的情况下对这些功能进行扩展;一般情况下,一个子类只能有一个基类,要实现多重继承,                        可以通过多级继承来实现;继承概念的实现方式有三类:实现继承,接口继承和可视继承;
      实现继承:使用基类的属性和方法而无需额外编码的能力;
      接口继承:仅使用属性和方法的名称,但是子类必须提供实现的能力;
      可视继承:子类使用基类的外观和实现代码的能力;
      OOP开发范式大致为: 划分对象->抽象类->将类组织成为层次化结构(继承和合成)->用类与实例进行设计和实现;
  多态:允许将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运行;简单的                    说,允许将子类类型的指针赋值给父类类型的指针;
  封装和继承是为了代码重用,而多态则是为了接口重用;
  把一个抽象的类变成一个具体的对象的过程叫实例化;                                          

            1>类和构造方法:

          技术分享

        2>类的变量与实例变量:

        技术分享

               技术分享

                                       技术分享

        3>类的继承:
        class SchoolMember(object):
            membur_nums = 0
        def __init__(self,name,age,sex):
          self.name = name
          self.age = age
          self.sex = sex
          self.enroll()
        def enroll(self):
          SchoolMember.membur_nums +=1
    # print("\033[32:1m The [%s] memburs SchoolMember [%s] is enrolled!\033[0m" %(self.membur_nums,self.name))
          
print("The [%s] memburs SchoolMember [%s] is enrolled!" % (self.membur_nums, self.name))
      def
tell(self):
            print(
"Hello my name is %s" %self.name)
      class
Teacher(SchoolMember):
      
def __init__(self,name,age,sex,course,salary):
        super(Teacher,
self).__init__(name,age,sex)
        
self.course = course
        
self.salary = salary
      
def teaching(self):
        print(
"Teacher [%s] is teaching [%s]" %(self.name,self.course))
      class
Student(SchoolMember):
      
def __init__(self,name,age,sex,course,tuition):
        super(Student,
self).__init__(name,age,sex)
        
self.course = course
        
self.tuition = tuition
      
def pay_tuition(self):
        print(
"cao,student [%s] paying tuition [%s]" %(self.name,self.tuition))
       t1 = Teacher(
"Alex",22,‘F‘,"PY",1000)
     t2 = Teacher(
"Tenglan",25,‘N/A‘,"PY",900)

     s1 = Student(
"SanJiang",24,"Female","python",15000)
     s2 = Student(
"BaoAn",23,"F","python",5000)

       t1.tell()
       t1.teaching()
       s1.tell()
       s1.pay_tuition()

                        技术分享

     4>类的静态方法类方法及属性:
      ****python不支持多态并且也用不到多态,多态用于java和c#中;
      多态的应用: 

        技术分享 

        技术分享

           类的成员可以分为三大类:字段,方法和属性;

          技术分享

      1)字段:字段包括普通字段和静态字段,他们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同,普通字段属于对象,静态                                字段属于类,普通字段需要通过对象来访问,静态字段通过类访问;
      静态字段在内存中只保存一份,普通字段在每个对象中都要保存一份;
      静态字段===类变量,普通字段====实例变量;
    2)属性(类方法):其中的装饰器将方法变为类方法,只能通过类来调用,实例不可以直接调用;
      属性的基本使用:  

                            技术分享

                            技术分享

                         类的静态方法:不能访问类变量,也不能访问实例变量;

          技术分享

                            类的属性,将方法变为属性:

          技术分享

                          给属性设置值:

          技术分享

           技术分享

            删除属性的设置值:

          技术分享

       4>新式类和经典类:
      1)多继承:新式类用广度优先查找,经典类用深度优先查找(3.0中都是广度优先);        

          技术分享

                      2)类的描述信息:__doc__; 

          技术分享

        3)类中实例销毁:__del__(析构函数),一直将程序执行完之后会执行实例销毁;

         技术分享

        技术分享

        4)__dict__ 以字典形式遍历出类下的所有变量;

         技术分享

         5>反射的妙用:

        import sys
        class WebServer(object):
          def __init__(self,host,port):
            self.host = host
            self.port = port

          def start(self):
            print("Server is starting...")
          def
stop(self):
            print("Server is stopping...")
          def
restart(self):
            self.stop()
            self.start()

        def test_run(self,name):
          print("running...",name,self.host)

      if
__name__ =="__main__":
        server = WebServer(
‘localhost‘,333)
        
#print(sys.argv[1])
        
if hasattr(server,sys.argv[1]):
          func = getattr(server,sys.argv[
1]) #获取server.start内存地址
          
func() #server.start()
        # setattr(server,"run",test_run) #类的实例,属性,方法名
        # server.run(server,"che")

        # delattr(server,"host") #删除实例中的对象
        # print(server.host)

        
delattr(WebServer,"start") #删除类中的方法
          
print(server.restart())
        
# cmd_dic = {
            # "start":server.start,
            # "stop":server.stop,
            # "restart":server.restart,
            # }
      #if sys.argv[1] == "start":
      # if sys.argv[1] in cmd_dic:
      # cmd_dic[sys.argv[1]]()
 

                     技术分享

Python之面向对象

标签:设计   基本   oca   opp   http   多态   9.png   school   基本使用   

原文地址:http://www.cnblogs.com/xiaocheche/p/7630286.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!