类即是一个模型,根据模型建立起不同的对象,对象间拥有共同的一些属性

简单的类:

 class P:
#类变量,所有实例共享变量,推荐使用方法是:类名.类变量名
pvarx="ppvar1" #构造函数
def __init__(self,valuex):
#实例变量,只属于当前实例
self.valuex=valuex #类方法
def pfun1(self):
print("类方法1输出",self.valuex,P.pvarx) #析构函数,先生成,先死亡
def __del__(self):
print("再见,实例:",self) #创建对象,类的实例化
p1=P("传递参数") #调用类变量
P.pvarx="" #调用类方法
p1.pfun1() #删除对象,变量等,直接使用del()
#del p1

类变量和实例变量:

类变量:

类及所有实例共享变量,推荐使用方法是 【类名.变量名】

实例变量(self.变量名):

只属于当前实例

注意:

如果同名且用实例调用时,则优先寻找到实例变量

使用实例调用并修改类变量值时,只能修改自己的,不影响整体

类方法使用全局变量:

Global声明变量为外部变量,表示可以长久修改外部变量,不写则只能使用,不能修改

 varx=1 #外部变量

 class XX:
def funx(self):
#global varx #声明为外部变量,表示可以长久修改外部变量,不写则只能使用
varx=111
print("------",varx) #输出:111 x=XX()
x.funx()
print(varx) #输出:1

类属性的私有化

私有变量:

在变量前加两个下划线即可,如【self.__变量名】,只能在类内访问,不能在类外通过实例访问

私有方法:

在类方法名前加入两个下划线,如【def __方法名(self){}】,使用与上相同

类的继承:

类可以实现多继承,多继承则可以用逗号分隔类名,如:子类名(父类1,父类2),继承的执行时从左到右,在列子中是先执行父类1,然后执行父类2
 class P:
pvarx="ppvar1" #类构造方法
def __init__(self,var1x):
print(var1x)
#类方法
def pfun1(self):
print("PPPPPP") #继承P类
class P1(P):
#重写父类的方法
def pfun1(self):
#P.pfun1(self) #调用父类的方法1
print("p1p1p1p1p1p1",P1.pvarx) p1=P1("ppp111")#实例化
p1.pfun1()
P.pfun1(p1)#调用父类的方法2
构造函数:
如果子类有自己的构造函数,则必须在子类构造函数里调用父类的构造函数,如果父类的构造函数参数为空,则可忽略。使用下列方法1可以实现多继承效果,一句就可以实现多个父类的构造函数,只是其中父类的构造函数参数必须相同
def __init__(self,v1,v2,v3):
#super(P1,self).__init__(v1) #执行父类构造函数方法一
#P(v1) #执行父类构造函数方法二
P.__init__(self,v1) #方法三
print(v1,v2,v3)

实例变量的继承:

父类中可以访问子类的实例变量
class P:
#类方法
def pfun1(self):
print("PPPPPP",self.p1var) #继承P类
class P1(P):
def __init__(self,p1v):
self.p1var=p1v p1=P1(11111)#实例化
p1.pfun1() #输出:PPPPPP 11111

多态

一个方法的多种实现,通过传递实例对象,实现调用实例中对应的方法
def pto(obj):
obj.funx()

静态方法:

通过类名调用,与实例无关
class P:

   @staticmethod
def funx(varpx):
print("-----------",varpx) P.funx("dongxiaodong")

类内方法:

不可访问实例变量,只能访问类变量:
class P:
#类变量
classvarx="" def __init__(self):
self.xvar="类方法不可访问此实例变量" #类内方法
@classmethod
def funx(self,varpx):
print("-----------",varpx,self.classvarx) p1=P()
p1.funx("dongxiaodong")

属性方法:

调用简单,调用时如同使用变量
class P:

   #属性方法
@property
def funx(self):
print("-----------") p1=P()
p1.funx #调用,如同变量调用
内容补充:
 class P:
funxvar11x="xxxx" #属性方法
@property
def funx(self):
print("-----------",P.funxvar11x) @funx.setter
def funx(self,funxvar11):
P.funxvar11x=funxvar11 @funx.deleter
def funx(self):
del P.funxvar11x p1=P()
p1.funx #输出:----------- xxxx
p1.funx="" #赋值
p1.funx #输出:----------- 1122 del p1.funx #删除

类的一些特殊方法

 class P:
def __call__(self, *args, **kwargs):
print("----call----",args) p1=P() p1("",22) #对象加括号传递参数,自动调用类中的call方法
print(p1.__class__) #得到所属类名 print(P.__dict__) #类名调用,打印类里的所有属性
print(p1.__dict__) #实例调用,打印实例的所有属性

反射

 class P:
def pfunx(self, name):
print("---- pfunx ----",name) p1=P() if hasattr(p1,"pfunx"): #判断对象里是否有某个方法
funx=getattr(p1,"pfunx") #得到改方法的内存地址
funx("dongxiaodong") #调用该方法 setattr(p1,"pvar","") #设置实例变量值,没有则新建实例变量
print(getattr(p1,"pvar")) #使用实例变量
delattr(p1, "pvar") # 删除实例变量

Python档案袋( 面向对象 )的更多相关文章

  1. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  2. Python的面向对象3

    接下来,我们接着讲Python的面向对象,在上一次的博客中,我们详细介绍了类与对象的属性,今天,我们来详细介绍一下面向对象中的方法! 1.定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外 ...

  3. Python的面向对象2

    我们接着讲解Python的面向对象 1.初始化实例属性 在现实生活中,一种类型的实例会具有相同的某些属性,把这些实例划分为一个类型,则这些实例必然有相似的部分.但是,在创建实例之后,我们一个一个的为实 ...

  4. Python的面向对象1

    今天,我们来介绍Python的面向对象编程,其实面向对象并不陌生,在C++  ,Java  ,PHP中也有大量使用! 好了,我们来步入正题! 那什么是面向对象编程呢? 1. 面向对象编程是一种程序设计 ...

  5. My way to Python - Day05 - 面向对象-思维导图

    My way to Python - Day05 - 面向对象   思维导图

  6. Python进阶---面向对象的程序设计思想

    Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  7. Python之面向对象一

    引子 小游戏:人狗大战 角色:人和狗 角色属性:姓名,血量,战斗力和性别(种类) 技能:打/咬 用函数实现人打狗和狗咬人的情形 def Dog(name,blood,aggr,kind): dog = ...

  8. python基础——面向对象进阶下

    python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...

  9. python基础——面向对象进阶

    python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...

  10. python基础——面向对象的程序设计

    python基础--面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

随机推荐

  1. 独立版Jexus配置SSL,支持https访问

    一.申请证书[腾讯免费证书] 二.验证DNS,即解析域名.记录类型选择 TXT ,主机记录与证书上的主机记录保持一致,记录值也与证书上的记录值保持一致 三.等待DNS验证与CA轮询,轮询成功后即可下载 ...

  2. Org mode无法生成LaTeX公式预览图片

    最近需要在Cygwin平台下的Emacs Org mode中生成LaTeX数学公式的预览图片,从而得到图文并貌的笔记与任务管理文档.但当我执行org-toggle-latex-fragment命令后却 ...

  3. James Munkres《拓扑学》笔记前言

    许久以前,我读到了侯捷先生于<深入浅出MFC>一书中所写的“勿在浮砂筑高台”这句话,颇受警醒与启发.如今在工科领域已摸索多年,亦逐渐真切而深刻地认识到,若没有坚实.完整.细致的数学理论作为 ...

  4. 公众号用户发送消息后台PHP回复没有反应的解决办法

    1.问题:微信公众平台官方提供下载的示例代码中,使用$postStr =$GLOBALS["HTTP_RAW_POST_DATA"];来获取微信服务器推送的消息数据.但是有的开发者 ...

  5. 2017GCTF部分writeup

    0x00:热身题 渗透测试大法:第一招,扫端口:第二招,... . 扫后台试试呗,用御剑扫到存在robots.txt,访问发现很多个Disallow:可能的试试,发现flag在/rob0t.php中 ...

  6. webserver开发

    https://www.cnblogs.com/zakun/p/5387910.html

  7. hive的概述和数据类型

    一.Hive概述 1.Hive简介 Hive数据仓库软件有助于使用SQL读取.编写和管理驻留在分布式存储中的大型数据集.提供了命令行工具和JDBC驱动程序以将用户连接到Hive. Hive可以将SQL ...

  8. PHP如何搭建百度Ueditor富文本编辑器

    本文为大家分享了PHP搭建百度Ueditor富文本编辑器的方法,供大家参考,具体内容如下 下载UEditor 官网:下载地址 将下载好的文件解压到thinkphp项目中,本文是解压到PUBLIC目录下 ...

  9. tf.contrib.slim.data数据加载(1) reader

    reader: 适用于原始数据数据形式的Tensorflow Reader 在库中parallel_reader.py是与reader相关的,它使用多个reader并行处理来提高速度,但文件中定义的类 ...

  10. HTML/CSS实现的一个列表页

    又到休息日,白天没事跟朋友去逛逛街,侃大山,晚上了,上网无趣,于是就想起该练练了, 这次是做了一个页面,最上面是一个banner 用到了一个jQuery的逻辑判断当banner初始top值小于wind ...