-------------------类属性和实例属性关系-------------------
1、类属性和实例属性关系
    1、实例属性
        实例对象独有的属性
    2、类属性
        类名访问类属性
    3、实例中无同名属性时,可访问到类属性,当定义同名实例属性时,则无法访问
    4、常用的查找指令
        1、vars :查看实例内属性
        2、dir :显示类属性和所有实例属性
        3、type :显示类型
 
-------------------方法-------------------
1、实例方法
    隐含的参数为类实例self
 
2、类方法
    隐含的参数为类本身cls
 
3、静态方法
    为隐含参数,主要为了类实例也可以直接调用静态方法
 
4、类名可以调用类方法和静态方法,但不可以调用实例方法
 
5、实例:
 class Test(object):
    def instancefun(self):
        print("InstanceFun")
        print(self)
 
    @classmethod
    def classfun(cls):
        print("ClassFun")
        print(cls)
 
    @staticmethod
    def staticfun():
        print("StaticFun")
 
-------------------私有化-------------------
1、xx :公有变量
 
2、_x :单前置下划线,私有化属性或方法,from somemodule import *禁止导入,类对象和子类可以访问
 
3、__xx :双前置下划线,避免与子类中的属性命名冲突,无法在外部直接访问(名字重整所以访问不到)
 
4、__xx__ :双前后下划线,用户名字空间的魔法对象或属性。例如:init , __ 不要自己发明这样的名字
 
5、xx__ :单后置下划线,用于避免与Python关键词的冲突
 
6、示例:
    #人类
    class Person(object):
        def __init__(self,name,age,state):
            self.name = name
            self._age = age
            self.__state = state
 
        def personshow(self):
            print self.name
            print self._age
            print self.__state
 
        def _work(self):
            print('in work')
 
        def __away(self):
            print('in away')
 
    #学生类继承人
    class Student(Person):
        def setInfo(self,name,age,state):
            self.name = name
            self._age = age
            self.__state = state
 
        def studentshow(self):
            print self.name
            print self._age
            print self.__state
 
    #main入口
    if __name__ == '__main__':
        #创建一个人类的对象
        person = Person('xiaohao', 18, 'football')
 
        person.personshow()
 
        #创建一个学生对象
        student = Student('xiaohao', 18, 'football')
 
        student.setInfo('xiaowang',25,'basketball')
 
        student.studentshow()
 
        student.personshow()
 
        person._work()
 
        person._Person__away()
 
-------------------分析一个类-------------------
1、__init__
    1、说明 :构造初始化函数
    2、触发条件 :创建实例后,赋值时使用,在new后
 
2、__new__
    1、说明 :生成实例所需属性
    2、触发条件 :创建实例时
 
3、__class__
    1、说明 :实例所在的类
    2、触发条件 :实例__class__
 
4、__str__
    1、说明 :实例字符串表示,可读性
    2、触发条件 :print(类实例),如没实现,使用repr结果
 
5、__repr__
    1、说明 :实例字符串表示,准确性
    2、触发条件 :类实例 回车 或者 print(repr(类实例))
 
6、__del__
    1、说明 :析构
    2、触发条件 :del删除实例
 
7、__dict__
    1、说明 :实例自定义属性
    2、触发条件 :vars(实例 dict)
 
8、__doc__
    1、说明 :类文档,子类不继承
    2、触发条件 :help(类或实例)
 
9、__getattribute__
    1、说明 :属性访问拦截器
    2、触发条件 :访问实例属性时,优先级高于__dict__访问
    3、实例 :
        #coding=utf-8
        class Itcast(object):
                def __init__(self,subject1):
                    self.subject1 = subject1
                    self.subject2 = 'cpp'
 
                #属性访问时拦截器,打log
                def __getattribute__(self,obj):
                    if obj == 'subject1':
                        print('log subject1')
                        return 'redirect python'
                    else:   #测试时注释掉这2行,将找不到subject2
                        return object.__getattribute__(self,obj)
 
                def show(self):
                    print 'this is Itcast'
 
        s = Itcast('python')
        print s.subject1
        print s.subject2
 
10、__bases__
    1、说明 :类的所有父类构成元素
    2、触发条件 :       
 
-------------------属性保护-------------------
1、实例:
    #coding=utf-8
 
    class Man(object):
        def __init__(self, name, age):
            self._name = name
            self._age = age
 
        @property
        def name(self):
            return self._name
 
        @property
        def age(self):
            return self._age
 
        @age.setter
        def age(self, age):
            if not isinstance(age, int):
                raise ValueError('age should be int')
            if age < 0 or age > 150:
                raise ValueError('age should be 0-150')
            self._age = age
 
    m = Man('jack', 32)
    print(m.name)
    print(m.age)
    m.age = 40
    print(m.age)
    m.name = 'rose' #此处报错
 
-------------------面向对象设计-------------------
1、封装:
 
2、继承:class Cat(Animle) class Animle(object)
    1、重写
        class Cat(Animle):
            def chi(self):
                重写
                Animal.chi(self)
 
3、多态:
    1、虚方法
    2、抽象方法
    3、接口
    4、示例:
        class Dog(Animal):
            def chi(self):
                print 'chi'
        def test(animal):
            animal.chi()
        dog = Dog()
        test(dog)

python学习总结(面向对象进阶)的更多相关文章

  1. Python学习之面向对象进阶

    面向对象进阶当然是要谈谈面向对象的三大特性:封装.继承.多态 @property装饰器 python虽然不建议把属性和方法都设为私有的,但是完全暴露给外界也不好,这样,我们给属性赋值的有效性九无法保证 ...

  2. Python学习之==>面向对象编程(二)

    一.类的特殊成员 我们在Python学习之==>面向对象编程(一)中已经介绍过了构造方法和析构方法,构造方法是在实例化时自动执行的方法,而析构方法是在实例被销毁的时候被执行,Python类成员中 ...

  3. Python学习day15-函数进阶(3)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  4. Python学习day14-函数进阶(2)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  5. Python学习day13-函数进阶(1)

    Python学习day13-函数进阶(1) 闭包函数 闭包函数,从名字理解,闭即是关闭,也就是说把一个函数整个包起来.正规点说就是指函数内部的函数对外部作用域而非全局作用域的引用. 为函数传参的方式有 ...

  6. 周末班:Python基础之面向对象进阶

    面向对象进阶 类型判断 issubclass 首先,我们先看issubclass() 这个内置函数可以帮我们判断x类是否是y类型的子类. class Base: pass class Foo(Base ...

  7. Python中级 —— 01面向对象进阶

    面向对象进阶 总结.补充(http://blog.csdn.net/fgf00/article/details/52479307) 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 ...

  8. python 学习分享-面向对象2

    面向对象进阶 静态方法 一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使用装饰器@staticmethod定义静态方法.类对象和实例都可以调用静态方法: class Foo: ...

  9. 学习PYTHON之路, DAY 8 - PYTHON 基础 8 (面向对象进阶)

    类的成员 类的成员可以分为三大类:字段.方法和属性 注:所有成员中,只有普通字段的内容保存对象中,即:根据此类创建了多少对象,在内存中就有多少个普通字段.而其他的成员,则都是保存在类中,即:无论对象的 ...

随机推荐

  1. 大数据与Java的关系

    随着2017年大数据各种应用的发展,大数据的价值得以充分的发挥,大数据已在企业.社会各个层面都成为重要的手段,数据已成为新的企业战略制高点,也是各个企业争夺的新焦点.那么我们一直在说着的大数据究竟是什 ...

  2. Chrome调试工具developer tool技巧

    Chrome这个浏览器赞的不能再赞了,给前端的开发调试工作带来了极大的效率提升. Chrome的简洁.快速吸引了无数人,它的启动速度.页面解析速度都很快,同时得益于Google V8的快速,Javas ...

  3. 【逻辑漏洞】基于BurpSuite的越权测试实战教程

    一.什么是越权漏洞?它是如何产生的? 越权漏洞是Web应用程序中一种常见的安全漏洞.它的威胁在于一个账户即可控制全站用户数据.当然这些数据仅限于存在漏洞功能对应的数据.越权漏洞的成因主要是因为开发人员 ...

  4. [COGS 2051] 王者之剑

    Saber大法吼 2051. 王者之剑 ★★★☆   输入文件:Excalibur.in   输出文件:Excalibur.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述 ...

  5. 抓取60000+QQ空间说说做一次数据分析

    对于QQ空间的数据一直来是垂涎不已,老早就想偷过来研究研究,这几天闲下来便开始动手... 整个程序的流程为:登录-->获取cookie-->获取所有的好友qq_number-->根据 ...

  6. html5图片上传时IOS和Android均显示摄像头拍照和图片选择

    最近在做信开发时,发现<input type="file" />在IOS中可以拍照或从照片图库选择,而Android系统则显示资源管理器,无拍照选项,网上查找资料,改为 ...

  7. 统一代码风格工具——editorConfig

    前面的话 在团队开发中,统一的代码格式是必要的.但是不同开发人员的代码风格不同,代码编辑工具的默认格式也不相同,这样就造成代码的differ.而editorConfig可以帮助开发人员在不同的编辑器和 ...

  8. 52. leetcode 96. Unique Binary Search Trees

    96. Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees) tha ...

  9. Codeforces 828B Black Square(简单题)

    Codeforces 828B Black Square(简单题) Description Polycarp has a checkered sheet of paper of size n × m. ...

  10. zabbix前台jsrpc注入

    zabbix是一个开源的企业级性能监控解决方案. 官方网站:http://www.zabbix.com zabbix的jsrpc的profileIdx2参数存在insert方式的SQL注入漏洞,攻击者 ...