-------------------类属性和实例属性关系-------------------
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. webpack2 项目

    webpack2 项目   实例gif图: 目录截图: 目录介绍: dist目录(最后生成的目录,里面文件为配置webpack自动生成的): c/:css文件夹; i/:img文件夹; j/:js文件 ...

  2. ICMP--ping--Traceroute

    ICMP经常被认为是IP层的一个组成部分.它传递差错报文以及其他需要注意的信息. ICMP报文通常被IP层或更高层协议TCP或UDP使用. 一些ICMP报文把差错报文返回给用户进程   ICMP报文是 ...

  3. Python爬虫初学(一)—— 爬取段子

    最近开始学Python的爬虫,是在这个博客跟着学习的,该博主用的是Python 2.7版本,而我使用的是3.5版本,很多不兼容的地方,不过没关系,自己改改就好了. 我们想针对网站的内容进行筛选,只获取 ...

  4. python8 字符串操作

    name = "my name is {name} and i am {year} old" print(name.capitalize()) print(name.count(& ...

  5. NYOJ--541--最强DE 战斗力(递推)

    最强DE 战斗力 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 春秋战国时期,赵国地大物博,资源非常丰富,人民安居乐业.但许多国家对它虎视眈眈,准备联合起来对赵国发 ...

  6. 小A点菜 洛谷 p1164

    题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过ui ...

  7. BaseAction 使用

    public class AreaAction extends BaseAction<Area> { @Autowired private AreaService areaService; ...

  8. POJ 2411 Mondriaan's Dream:网格密铺类 状压dp

    题目链接:http://poj.org/problem?id=2411 题意: 给你一个n*m的网格 (1<=n,m<=11) ,往里面铺1*2或2*1的砖块,问你铺完这个网格有多少种不同 ...

  9. SpringMVC创建HelloWorld程序

    1.IDE说明和依赖管理工具说明 开发工具:intellij idea 依赖管理使用:maven 2.创建maven工程 创建新的maven工程,并添加相应的文件夹,创建好的项目目录如下所示: 3.添 ...

  10. Lightoj1205——Palindromic Numbers(数位dp+回文数)

    A palindromic number or numeral palindrome is a 'symmetrical' number like 16461 that remains the sam ...