zoukankan      html  css  js  c++  java
  • Python之面向对象

    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("33[32:1m The [%s] memburs SchoolMember [%s] is enrolled!33[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]]()
     

                         

  • 相关阅读:
    nginx实战
    apache定制错误页面
    openstack虚拟机获取不到ip
    ansible-galera集群部署(13)
    kubernetes监控(12)
    kubernets部署sock-shop微服务电商平台(11)
    用ConfigMap管理配置(10)
    k8s管理机密信息(9)
    shell编程(2)
    shell练习题集合
  • 原文地址:https://www.cnblogs.com/xiaocheche/p/7630286.html
Copyright © 2011-2022 走看看