一、构造方法

在使用类创建对象的时候(就是类后面加括号)就自动执行__init__方法。

  1. class A:
  2. def __init__(self):
  3. print('A')
  4.  
  5. class B:
  6. def __init__(self):
  7. print('B')
  8.  
  9. obj = A()
  10.  
  11. #虽然只是创建了obj对象,但是执行了__init__方法,输出了A

Python中派生类可以继承父类的构造方法

1.基于super()

遇到super()就表示去执行父类的xxx属性

  1. class A:
  2. def __init__(self):
  3. print('A')
  4. self.tp = 'annimal'
  5.  
  6. class B(A):
  7. def __init__(self):
  8. print('B')
  9. super(B,self).__init__()
  10. #执行B父类中的__init__方法,这里的self是obj
         #super里的self不是传入后面的__init__方法里,而是直接传入A中的__init__,这里super会帮你传递参数
  11.  
  12. obj = B()
  13.  
  14. 输出结果:
  15. B
  16. A

2.通过父类的名称执行父类的构造方法。

  1. class A:
  2. def __init__(self):
  3. print('A')
  4. self.tp = 'annimal'
  5.  
  6. class B(A):
  7. def __init__(self):
  8. print('B')
  9. A.__init__(self)
  10. #父类的名称跟上__init__()
  11.  
  12. obj = B()
  13.  
  14. 输出结果:
  15. B
  16. A

  这两种方式中推荐super,使用第二中方法的时候,进行继承父类的方法的时候,是你指定父类的方法,看起来比较乱,但是使用super的时候,没有让你指定父类的名称,这种继承时候就按照正常的继承规则(上一节所讲)来进行。

二、反射

利用反射查看面向对象的成员

根据字符串的形式去对象(某个模块)操作其成员

  1. class Foo:
  2. def __init__(self,name):
  3. self.name = name
  4.  
  5. def show(self):
  6. print('Fshow')
  7.  
  8. r = hasattr(Foo,'show')
  9. print(r)
  10. #查看Foo类中是否有show函数
  11. obj = Foo('alexsel')
  12. s = hasattr(obj,'name')
  13. print(s)
  14. #查看obj对象里name是否存在
  15. t = hasattr(obj,'show')
  16. print(t)
  17. #通过对象查看是否存在show这个函数
  18.  
  19. 输出结果:
  20. True
  21. True
  22. True

  我们通过类进行查询的时候,仅仅只能找到类中的属性,但是我们通过类创建的对象查询的时候,我们不但可以找到对象中的属性(例如,self.name,直接在类中查询找不到),还可以找到对象中的方法(例如show函数),因为对象中有一个指向类的指针,当通过对象进行查询的时候,可以通过指针找到类中的属性。

利用反射导入模块、查找类、创建对象、查找对象中的字段

1.首先使用__import__导入文件

函数功能用于动态的导入模块,主要用于反射或者延迟加载模块。

__import__(module)相当于import module

2.使用getattr(所导入的文件名,类名)导入类

getattr根据字符串的形式去某个模块中寻找东西

3.通过找到的类创建对象

4.获取对象中的属性

s2.py文件中的代码

  1. class Foo:
  2. def __init__(self,name):
  3. self.name = name
  4.  
  5. def show(self):
  6. print('Fshow')

s1.py文件中的代码

  1. m = __import__('zp')
  2.  
  3. class_name = getattr(m,'Foo')
  4.  
  5. obj = class_name('Alexsel')
  6.  
  7. val = getattr(obj,'name')
  8.  
  9. print(val)
  10.  
  11. 输出结果:
  12. Alexsel

三、静态字段

静态字段的作用,将每个对象里存在的重复的东西,使用静态字段在类中只需写一份。

  1. class Foo:
  2.  
  3. annimal = 'Cat'
  4. #这个是静态字段,是在类中保存的
  5.  
  6. def __init__(self,name):
  7. temp = 'Alexsel'
  8. #普通字段,存放在对象中
  9.  
  10. #普通方法,存放在类中
  11. def show(self):
  12. print('SH')
  13.  
  14. print(Foo.annimal)
  15.  
  16. 输出结果:
  17. Cat

使用静态字段的时候,优先使用类名访问静态字段。

四、静态方法

  静态方法是类中的函数,不需要实例。静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作。

  1. class Foo:
  2. annimal = 'Cat'
  3.  
  4. def __init__(self):
  5. pass
  6.  
  7. def show(self):
  8. print('SH')
  9.  
  10. #装饰器,使用这个装饰器装饰类中的一个方法,这个方法就变为静态方法
  11. @staticmethod
  12. def out():
  13. print('out')
  14.  
  15. Foo.out()
  16. #静态方法中不需要传递self,所以访问静态方法优先使用类去访问
  17. obj = Foo()
  18. obj.out()
  19.  
  20. 输出结果:
  21. out
  22. out

静态方法可以让我们不需要创建对象就可以执行类中的方法。

五、类方法

  类方法是将类本身作为对象进行操作的方法。他和静态方法的区别在于:不管这个方式是从实例调用还是从类调用,它都用第一个参数把类传递过来

  1. class Foo:
  2. annimal = 'Cat'
  3.  
  4. def __init__(self):
  5. pass
  6.  
  7. def show(self):
  8. print('SH')
  9.  
  10. #装饰器,使用这个装饰器装饰类中的一个方法,这个方法就变为类方法
  11. @classmethod
  12. def out(cls):
  13. print('out',cls)
  14.  
  15. Foo.out()
  16. #类方法,会自动将的类传递到类方法的cls中
  17.  
  18. 输出结果:
  19. out <class '__main__.Foo'>

Python学习:16.Python面对对象(三、反射,构造方法,静态字段,静态方法)的更多相关文章

  1. 《转》Python学习(16)-python异常

    转自 http://www.cnblogs.com/BeginMan/p/3171445.html 一.什么是错误,什么是异常,它们两者区别 这里解释如下:个人觉得很通俗易懂 错误是指在执行代码过程中 ...

  2. Python学习-16.Python中的错误处理

    虽然叫错误,但跟 C# 中的异常是一回事.只不过 Python 中叫错误(Error)而 C# 中叫异常(Exception). 先手工产生一个异常: file = open('','r') 上面一句 ...

  3. Python学习day09 - Python进阶(3)

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

  4. python的类和对象(类的静态字段)

    转自:http://www.cnblogs.com/Eva-J/p/5044411.html 什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是 ...

  5. Python学习day05 - Python基础(3) 格式化输出和基本运算符

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

  6. Python学习笔记之类与对象

    这篇文章介绍有关 Python 类中一些常被大家忽略的知识点,帮助大家更全面的掌握 Python 中类的使用技巧 1.与类和对象相关的内置方法 issubclass(class, classinfo) ...

  7. python学习笔记4(对象/引用;多范式; 上下文管理器)

    ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 21. 动态类型:对象/引用 对象和引用: 对象是储存在内存中的实体,对象名只是指向这一对象的引用(refere ...

  8. Python学习之路【第三篇】--集合

    语法结构: set1.issubset(set2)判断集合set1是否为set2的子集,返回布尔值. ? 1 2 3 4 5 6 s1 = {'Java', 'PHP', 'Python', 'C++ ...

  9. Python学习历程之面对对象浅识

    # ===============================封装====================================# class Bar:# def __init__(se ...

  10. Python学习笔记—Python基础1 介绍、发展史、安装、基本语法

    第一周学习笔记: 一.Python介绍      1.Python的创始人为吉多·范罗苏姆.1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言 ...

随机推荐

  1. Win10 mysql容器启动命令

    docker run --name mysql -it -p : -e MYSQL_ROOT_PASSWORD=Hongfund5013 -e MYSQL_USER=hongfund_os -e MY ...

  2. Python学习---重点模块的学习【all】

    time     [时间模块] import time # print(help(time)) # time模块的帮助 print(time.time()) # 时间戳 print(time.cloc ...

  3. IOS XMPP总结

    //前言:仿weixin实现一个即时通讯的案例,支持版本7.0以上 "准备工作 创建项目时使用git" /* 显示隐藏文件,看到git的文件夹 defaults write com ...

  4. Redux 源码解读 —— 从源码开始学 Redux

    已经快一年没有碰过 React 全家桶了,最近换了个项目组要用到 React 技术栈,所以最近又复习了一下:捡起旧知识的同时又有了一些新的收获,在这里作文以记之. 在阅读文章之前,最好已经知道如何使用 ...

  5. struts2(2.0.x到2.1.2版本)的核心和工作原理(转)

    在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.在这儿MVC模式的好处就 ...

  6. python中的BaseManager通信(一)文件三分

    可以在windows下单机运行 主部分(提供服务器) #mainfirst.py from multiprocessing.managers import BaseManager import Que ...

  7. 5、Dubbo-监控中心

    5.1).dubbo-admin 图形化的服务管理页面:安装时需要指定注册中心地址,即可从注册中心中获取到所有的提供者/消费者进行配置管理 5.2).dubbo-monitor-simple 简单的监 ...

  8. PHP导出excel表格

    <?php header('Content-Type: application/force-download'); header("Content-type: text/html; c ...

  9. CS20Chapter3

    waiting  P54 shuffle data 03_Lecture note_Linear and Logistic Regression 学习点1: python的地址输入是要不能用正斜杠\的 ...

  10. IntelliJ IDEA隐藏不想看到的文件或文件夹

    打开IntelliJ IDEA,File -> Settings -> Editor -> File Types 在红框部分加上你想过滤的文件或文件夹名