Python学习:16.Python面对对象(三、反射,构造方法,静态字段,静态方法)

一、构造方法

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

class A:
    def __init__(self):
        print(‘A‘)

class B:
    def __init__(self):
        print(‘B‘)

obj = A()

#虽然只是创建了obj对象,但是执行了__init__方法,输出了A

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

1.基于super()

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

class A:
    def __init__(self):
        print(‘A‘)
        self.tp = ‘annimal‘

class B(A):
    def __init__(self):
        print(‘B‘)
        super(B,self).__init__()
        #执行B父类中的__init__方法,这里的self是obj     #super里的self不是传入后面的__init__方法里,而是直接传入A中的__init__,这里super会帮你传递参数

obj = B()

输出结果:
B
A

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

class A:
    def __init__(self):
        print(‘A‘)
        self.tp = ‘annimal‘

class B(A):
    def __init__(self):
        print(‘B‘)
        A.__init__(self)
        #父类的名称跟上__init__()

obj = B()    

输出结果:
B
A

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

二、反射

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

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

class Foo:
    def __init__(self,name):
        self.name = name

    def show(self):
        print(‘Fshow‘)

r = hasattr(Foo,‘show‘)
print(r)
#查看Foo类中是否有show函数
obj = Foo(‘alexsel‘)
s = hasattr(obj,‘name‘)
print(s)
#查看obj对象里name是否存在
t = hasattr(obj,‘show‘)
print(t)
#通过对象查看是否存在show这个函数

输出结果:
True
True
True

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

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

1.首先使用__import__导入文件

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

__import__(module)相当于import module

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

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

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

4.获取对象中的属性

s2.py文件中的代码

class Foo:
    def __init__(self,name):
        self.name = name

    def show(self):
        print(‘Fshow‘)

s1.py文件中的代码

m = __import__(‘zp‘)

class_name = getattr(m,‘Foo‘)

obj = class_name(‘Alexsel‘)

val = getattr(obj,‘name‘)

print(val)

输出结果:
Alexsel

三、静态字段

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

class Foo:

    annimal = ‘Cat‘
    #这个是静态字段,是在类中保存的

    def __init__(self,name):
        temp = ‘Alexsel‘
        #普通字段,存放在对象中

    #普通方法,存放在类中
    def show(self):
        print(‘SH‘)

print(Foo.annimal)

输出结果:
Cat

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

四、静态方法

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

class Foo:
    annimal = ‘Cat‘

    def __init__(self):
        pass

    def show(self):
        print(‘SH‘)

    #装饰器,使用这个装饰器装饰类中的一个方法,这个方法就变为静态方法
    @staticmethod
    def out():
        print(‘out‘)

Foo.out()
#静态方法中不需要传递self,所以访问静态方法优先使用类去访问
obj = Foo()
obj.out()

输出结果:
out
out

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

五、类方法

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

class Foo:
    annimal = ‘Cat‘

    def __init__(self):
        pass

    def show(self):
        print(‘SH‘)

    #装饰器,使用这个装饰器装饰类中的一个方法,这个方法就变为类方法
    @classmethod
    def out(cls):
        print(‘out‘,cls)

Foo.out()
#类方法,会自动将的类传递到类方法的cls中

输出结果:
out <class ‘__main__.Foo‘>

原文地址:https://www.cnblogs.com/liudi2017/p/9357613.html

时间: 2024-08-28 12:11:21

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

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

转自 http://www.cnblogs.com/BeginMan/p/3171445.html 一.什么是错误,什么是异常,它们两者区别 这里解释如下:个人觉得很通俗易懂 错误是指在执行代码过程中发生的事件,它中断或干扰代码的正常流程并创建异常对象.当错误中断流程时,该程序将尝试寻找异常处理程序(一段告诉程序如何对错误做出响应的代码),以帮助程序恢复流程.换句话说,错误是一个事件,而异常是该事件创建的对象. 当使用短语"产生异常"时,表示存在问题的方法发生错误,并创建异常对象(包含

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

虽然叫错误,但跟 C# 中的异常是一回事.只不过 Python 中叫错误(Error)而 C# 中叫异常(Exception). 先手工产生一个异常: 1 file = open('','r') 上面一句由于路径是空路径,因此文件肯定是不存在的,执行这一句会引发 FileNotFoundError 这个错误. 既然是错误的,程序也停止了,这是我们不希望的,因此得想办法处理一下. 在 Python 中,异常处理使用 try.except.finally 这三个关键字. 修改代码如下: 1 path

爬虫学习 16.Python网络爬虫之Scrapy框架(CrawlSpider)

爬虫学习 16.Python网络爬虫之Scrapy框架(CrawlSpider) 引入 提问:如果想要通过爬虫程序去爬取"糗百"全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基于CrawlSpider的自动爬取进行实现(更加简洁和高效). 今日概要 CrawlSpider简介 CrawlSpider使用 基于CrawlSpider爬虫文件的创建 链接提取器 规则解析器 今日详

python学习之-文件和对象

文件和对象文件对象不仅可以用来访问普通的磁盘文件,还能够来访问普通的磁盘文件,也可以访问任何其他类型抽象层面的"文件".内建函数 open() 返回一个文件对象,对该文件进行后续相关的操作都要用到它.文件内建函数 open() 以及 file() 提供了初始化输入/输出(I/O)操作的通用接口.open() 内建函数成功打开文件后会返回一个文件对象,否则引发一个错误.当操作失败,会产生一个IOERROR异常.内建函数 open() 的基本语法:file_object = open(fi

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

转自:http://www.cnblogs.com/Eva-J/p/5044411.html 什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是它.后面大多数情况可能会简称为类变量.): 我们看上面的例子,这里的money就是静态字段,首先看它的位置,是在father类中,而不是在__init__中.那么一个小小的静态字段,我为什么要特意写一篇番外给它呢?耐着性子看下去,你就会发现一个小小的类变量,却折射出了整个类的世界. 首先我们先来解释

总结:Python学习 和 Python与C/C++交互

本篇仅仅是Python的学习和Python和C++数据对接过程中的一些总结. 由于工作的需要,用一周的时间学习 Python. Python是基于C实现的一门解释型语言,由于其易用性,俘获了不少开发者和运维的心.据说,Python 在科学计算领域,逐步吞噬着古老语言 Fortran的份额.这门语言是Google的第二语言,国内的知乎,豆瓣,都使用纯Python开发.Python的官方网站:http://www/python.org. 为了逐步完善的我们的数据库驱动服务,我们需要为客户提供更多,更

Python学习教程(Python学习路线+Python学习视频):Python数据结构

Python学习教程(Python学习路线+Python学习视频):Python数据结构   数据结构引言:   数据结构是组织数据的方式,以便能够更好的存储和获取数据.数据结构定义数据之间的关系和对这些数据的操作方式.数据结构屏蔽了数据存储和操作的细节,让程序员能更好的处理业务逻辑,同时拥有快速的数据存储和获取方式. 在这篇文章中,你将了解到多种数据结构以及这些数据结构在Python中实现的方式.    抽象数据类型和数据结构 数据结构是抽象数据类型(ADT)的实现,通常,是通过编程语言提供的

python接口自动化九--面对对象编程二,搭建测试环境,多线程与多进程

1.面对对象编程 1.1 基本概念 实例方法:在类里面定义的函数都是实例方法,函数内有self变量 类方法: 不可以实例化,直接用类名调用 类方法可以使用类变量,cls.xxx 实例可以通过self.xx使用类方法 类方法里面不能使用实例方法和实例变量 静态方法: 定义在类里的普通函数 用不了实例方法,实例变量,类方法,类变量 不需要实例化,直接用类名调用 ? 属性方法: 是实例方法 不能有入参 用它的时候,直接m.func,把它当做变量来使用,后面不需要加括号 它是获取函数的返回值 析构函数:

骑士计划-python全栈 15 面对对象初识

初识面向对象: 面向过程: 优点:极大的降低了写程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可 缺点:一套流水线或者流程就是用来解决一个问题,代码牵一发而动全身 应用场景:一旦完成基本很少改变的场景.例Linux内核,Git以及apcaApache HTTPserserver等 面向对象: 优点:解决了程序的可扩展性,对某一个对象单独修改,会立刻反映到整个体系中,例:对游戏中一个人物参数的特征和技能修改都很容易 缺点:可控性差(结果预测性差),无法向面向过程的程序设计流水线式的可以很精准的预

Python学习(一) Python安装配置

我本身是Java程序猿,听说Python很强大,所以准备学习一下Python,虽说语言都是相同的,但java跟python肯定还是有区别的.希望在此记录一下自己的学习过程. 目前,Python分2.X版本和3.X版本.我选择的是Python2.x版本.为了快速学习Python的WEB开发,我选择的Python的WEB开发框架是Django.Django有个好处就是自带了后台管理系统. 第一步,下载: 因本人使用的电脑操作系统是Windows7 64位,所以选择下载Python的windows安装