zoukankan      html  css  js  c++  java
  • 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

                       

  • 相关阅读:
    nginx配置https访问
    nginx解决带_的head内容丢失
    软件开发报价的计算方法(转载)
    使用游标批量初始化密码
    调用WScript.Shell时产生Automation 服务器不能创建对象的错误
    用.NET SqlBulkCopy类执行批量插入数据到数据库
    XML文件做数据源的读取使用
    页面实现数据库备份(还原)实例
    特定的ExcelCSS样式Excel导出
    索引的初步学习总结
  • 原文地址:https://www.cnblogs.com/songxiaonan/p/6129519.html
Copyright © 2011-2022 走看看