• python基础 面向对象编程


    面向对象编程的基本思想
      类和实例
        类用于定义抽象类型
        实例根据类的定义创建出来
     
    python 定义类并创建实例
      在python 中,通过class 关键字定义,以Person 为例
      定义一个person 类如下:
        class Person(object):
          pass
     
     
    python 创建实例属性
       如何让每个实例拥有各自不同的属性。
          xiaoming = Person()
          xiaoming.name = 'Xiao Ming'
          xiaoming.gender = 'Male'
           xiaoming.birth = '1990-1-1'
          给xiaohong加上的属性不一定要和xiaoming相同:
          xiaohong = Person()
          xiaohong.name = 'Xiao Hong'
          xiaohong.school = 'No. 1 High School'
           xiaohong.grade = 2
     
    python 初始化实例属性
      如何让Person 类在创建的时候就拥有name gender 和 birth 属性。
      在定义Person 类时,可以为Person 类添加一个特殊的 _init_()
      在创建实例时,_init_() 方法被自动调用,我们能再此为每个实例
      都统一加以下属性:
        
        class Person(object):
          def_init_(self,name,gender,birth):
            self.name = name
            self.gender = gender
            self.birth = birth
        
          __init__() 方法的第一个参数必须是 self(也可以用别的名字,
          但建议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何区别。
          相应的,创建实例时,就必须提供除self 以外的实例
            xiaoming = Person('Xiao Ming', 'Male', '1991-1-1')
            xiaohong = Person('Xiao Hong', 'Female', '1992-2-2')
          
          有了__init__()方法,每个Person实例在创建时,都会有 name、gender
           和 birth 这3个属性,并且,被赋予不同的属性值,访问属性使用.操作符:
              print xiaoming.name # 输出 'Xiao Ming'
               print xiaohong.birth # 输出 '1992-2-2'
     
    python 中访问限制
        我们可以给一个实例绑定很多属性,如果有些属性不希望被外
        部访问到怎么办?
        Python对属性权限的控制是通过属性名来实现的,如果一个属
        性由双下划线开头(__),该属性就无法被外部访问。看例子:
          class Person(object):
              def __init__(self,name):
              self.name = name
              self.title = 'Mr'
              self.__job = 'Student'
          p = Person('Bob')
            print p.name
              Bob
            print p._title
              Mr
            print p.__job
              Error
    python 创建类属性
        类是模板,而实例则是根据类创建的对象。
        绑定在一个实力上的属性不会影响其他实例,但是类本身是一个对象。
        如果在类上绑定一个属性,则所有实例都可以访问类的属性,并且
        所有实例访问的类属性都是同一个,也就是说,实例属性没个实例
        各自拥有,互相独立,而类属性有且只有一份。
        定义类可以直接在class 中定义
          class Person(object):
            address = 'Earth'
            def __init__(self,name):
            self.name = name
        由于python 是动态语言,类属性也可以动态添加修改
          Person.address = 'China'
          print p1.address
            ‘China’
        因为类属性只有一份,所以,当Person类的address改变时,
          所有实例访问到的类属性都改变了。
     
    python 中类属性和实例属性名字冲突怎么办。
        修改类属性会导致所有实例访问到的类属性全部收到影响,但是,
        如果在实例变量上修改类属性发什么问题呢。
        当实例属性和类属性重名时,实例属性优先级高
        它将屏蔽掉对类属性的访问。
     
    python 中定义实例方法
        实例的方法就是在类中定义的函数,它的第一个参数永远
        是self,指定调用该方法的实体本身,其他参数和一个普通
        函数完全一样的。
        class Person(object):
          def __init__(self,name):
          self._name = name
          def get_name(self):
            return self._name
        et_name(self) 就是一个实例方法,它的第一个参数是self
        。__init__(self, name)其实也可看做是一个特殊的实例方法。
        p1 = Person('Bob') print p1.get_name() # self不需要显式传入 # => Bob
     
    python 中方法也是属性
        在class 中定义的实例方法其实也是属性,它实际上
        是一个函数对象。
          class Person(object):
            def __init__(self,name,score):
              self.name = name
              self.score = score
            def get_grade(self):
              return 'A'
     
    python 中定义类方法
        和属性类似,方法也分实例方法和类方法。
        在class 中定义的全部是实例方法,实例方法第一个参数 self
        是实例本身。
          在class 中定义类方法,需要这么些。
          class Person(object):
            count = 0;
          @class smethod
          def how_many(cls):
            return cls.count
          def __init__(self,name):
            self.name = name
            Person.count = Person.count + 1
          print Person.how_many()
          p1 = Person('Bob')
          print Person.how_many()
        过标记一个 @classmethod,该方法将绑定到 Person 类上,
        而非类的实例。类方法的第一个参数将传入类本身,通常将
        参数名命名为 cls,上面的 cls.count 实际上相当于 Person.count。

  • 相关阅读:
    python 性能测试
    python calendar
    python datetime
    Zookeeper的功能以及工作原理
    ADB 源码分析(一) ——ADB模块简述【转】
    ADB模块源码分析(二)——adb server的启动
    C/C++中的预编译指令
    开启andriod手机的adbd,进行无线adb调试
    adb和adbd详尽分析
    adb client, adb server, adbd原理浅析(附带我的操作过程)
  • 原文地址:https://www.cnblogs.com/nmxs/p/8631157.html
Copyright © 2020-2023  润新知