zoukankan      html  css  js  c++  java
  • Python面向对象相关知识1

    1.
    python是动态的语言,这样在使用类的时候,类的属性就可以随意的添加,但是这样在实际开发中有一定的缺陷,所以,可以在类中定义一个特殊的__init__()方法,当创建实例时,__init__()方法被自动调用,我们就能在此为每个实例都统一加上以下属性:
    class Person(object):
        def __init__(self, name, gender, birth):
            self.name = name
            self.gender = gender
            self.birth = birth
    __init__() 方法的第一个参数必须是 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
    print xiaohong.birth
    注意:这个self参数一定不能丢掉。
    2.
    Python对象的给对象赋值的时候,可以使用setattr()进行赋值(和java的set方法很像)
    class Person(object):
        def __init__(self,name,gender,birth):
            self.name = name
           #setattr(self,'name',)
            self.gender = gender
            self.birth = birth        
    xiaoming = Person('Xiao Ming', 'Male', '1990-1-1')
     
    print xiaoming.name
    print xiaoming.job
    3.
    python类的属性还可以是关键字,使用**kw表示
    class Person(object):
        def __init__(self,name,gender,birth,**kw):
            self.name = name
            self.gender = gender
            self.birth = birth
            for k,v in kw.iteritems():
                setattr(self,k,v)
    xiaoming = Person('Xiao Ming', 'Male', '1990-1-1', job='Student')
    print xiaoming.name
    print xiaoming.job
    4.
    python 属性访问权限,和java的public和private很相似,python也可以限制属性的访问权限。
    a.使用双下划线开头的属性只能在内部访问。
    b.使用单下划线开头的属性原则也只能在内部访问,但是实际上外部也可以访问
    c.开头和结尾都使用下划线的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,通常我们不要把普通属性用"__xxx__"定义。
    5.
    Python中的try...catch
    AttributeError的异常类型为对象没有这个属性
    eg1:
    class Person(object):
        def __init__(self, name, score):
            self.name= name
            self.__score=score
    p = Person('Bob', 59)
    print p.name
    try:
        print p.__score
    except AttributeError:
        print ('attributeError')
    6.
    类的属性(有点像java的static)
    class Person(object):
        address = 'Earth'
        def __init__(self, name):
            self.name = name
    类的属性直接绑定到类上,访问该属性不需要实例化对象,直接就可以访问,实例化的对象也是可以访问的
    print Person.address
     
    p1 = Person('Bob')
    p2 = Person('Alice')
    print p1.address
    # => Earth
    print p2.address
    # => Earth
    累的属性是可以动态的进行修改的
    Person.address = 'China'
    print p1.address
    # => 'China'
    print p2.address
    # => 'China'
    善守者藏于九地之下, 善攻者动于九天之上
  • 相关阅读:
    Magicodes.IE之花式导出
    Magicodes.IE之导入导出筛选器
    Magicodes.IE 2.3重磅发布——.NET Core开源导入导出库
    快速配置Azure DevOps代理服务器
    如何做好一个开源项目之徽章(二)
    使用Seq搭建免费的日志服务
    SpringBoot + SpringCloud Hystrix 实现服务熔断
    dedecms从word复制粘贴公式
    CuteEditor从word复制粘贴公式
    TinyMCE从word复制粘贴公式
  • 原文地址:https://www.cnblogs.com/jiutiankunpeng/p/6728821.html
Copyright © 2011-2022 走看看