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

简单的类:

 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. PHP如何处理emoji表情存入utf8的数据库

    一般Mysql表设计时,都是用UTF8字符集的.把带有emoji的昵称字段往里面insert一下就没了,整个字段变成了空字符串.这是怎么回事呢? 原来是因为Mysql的utf8字符集是3字节的,而em ...

  2. 记录vue项目上线遇到的一些问题

    1. 静态资源路径不对,在开发模式下正常,打包到服务器上的时候,发现静态资源全部请求不到 原因:开发模式下,本地静态服务器直接从项目目录直接起的,跟static是同目录,写绝对路径没问题,直接loca ...

  3. Python数据可视化之Matplotlib实现各种图表

    数据分析就是将数据以各种图表的形式展现给领导,供领导做决策用,因此熟练掌握饼图.柱状图.线图等图表制作是一个数据分析师必备的技能.Python有两个比较出色的图表制作框架,分别是Matplotlib和 ...

  4. oracle中可能使用到的命令

    借鉴他人 1.su – oracle 不是必需,适合于没有DBA密码时使用,可以不用密码来进入sqlplus界面.2.sqlplus /nolog 或sqlplus system/manager 或. ...

  5. input autocomplete属性设计输入框自动联想(php实现)

    因为客户临时要求加一个输入框自动联想,就开始了解这块.结合网上总结最难的一点就是找好对应的js版本以及相应的jQuery-ui: 以下是我用的版本,以及连接地址: jQuery的js文件: <s ...

  6. Game 23

    Polycarp plays "Game 23". Initially he has a number nn and his goal is to transform it to  ...

  7. hdu1201 java

    题意: 求某人从出生到18岁生日所经过的天数.如果这个人没有18岁生日,就输出-1. 思路: 通过毫秒值计算天数. 利用:来自https://www.cnblogs.com/xiohao/p/5294 ...

  8. java简单框架设计

    设计框架包可以作为一个工具给大家用,需要有完全不同设计思路给出来,不同于我们去做一个web服务.网站. 或者一个业务微服务,需要从原来使用视角转换成一个构建者视角. 框架或者工具,更多是框架来管理或者 ...

  9. jQuery 动态绑定插件livequery的用法

  10. Ubuntu下安装Pycharm出现unsupported major.minor version 52.0

    (一)原因 Ubuntu下pycharm安装:https://jingyan.baidu.com/article/60ccbceb4e3b0e64cab19733.html pycharm激活:htt ...