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

简单的类:

 1 class P:
 2     #类变量,所有实例共享变量,推荐使用方法是:类名.类变量名
 3     pvarx="ppvar1"
 4
 5     #构造函数
 6     def __init__(self,valuex):
 7         #实例变量,只属于当前实例
 8         self.valuex=valuex
 9
10     #类方法
11     def pfun1(self):
12         print("类方法1输出",self.valuex,P.pvarx)
13
14     #析构函数,先生成,先死亡
15     def __del__(self):
16         print("再见,实例:",self)
17
18 #创建对象,类的实例化
19 p1=P("传递参数")
20
21 #调用类变量
22 P.pvarx="11222333"
23
24 #调用类方法
25 p1.pfun1()
26
27 #删除对象,变量等,直接使用del()
28 #del p1

类变量和实例变量:

类变量:

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

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

只属于当前实例

注意:

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

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

类方法使用全局变量:

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

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

类属性的私有化

私有变量:

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

私有方法:

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

类的继承:

类可以实现多继承,多继承则可以用逗号分隔类名,如:子类名(父类1,父类2),继承的执行时从左到右,在列子中是先执行父类1,然后执行父类2
 1 class P:
 2     pvarx="ppvar1"
 3
 4     #类构造方法
 5     def __init__(self,var1x):
 6         print(var1x)
 7     #类方法
 8     def pfun1(self):
 9         print("PPPPPP")
10
11 #继承P类
12 class P1(P):
13     #重写父类的方法
14     def pfun1(self):
15         #P.pfun1(self) #调用父类的方法1
16         print("p1p1p1p1p1p1",P1.pvarx)
17
18 p1=P1("ppp111")#实例化
19 p1.pfun1()
20 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=p1vp1=P1(11111)#实例化
p1.pfun1() #输出:PPPPPP 11111

多态

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

静态方法:

通过类名调用,与实例无关
class P:@staticmethoddef funx(varpx):print("-----------",varpx)P.funx("dongxiaodong")

类内方法:

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

属性方法:

调用简单,调用时如同使用变量
class P:#属性方法
   @propertydef funx(self):print("-----------")p1=P()
p1.funx  #调用,如同变量调用

内容补充:
 1 class P:
 2    funxvar11x="xxxx"
 3
 4    #属性方法
 5    @property
 6    def funx(self):
 7        print("-----------",P.funxvar11x)
 8
 9    @funx.setter
10    def funx(self,funxvar11):
11        P.funxvar11x=funxvar11
12
13    @funx.deleter
14    def funx(self):
15        del P.funxvar11x
16
17 p1=P()
18 p1.funx #输出:----------- xxxx
19 p1.funx="1122"  #赋值
20 p1.funx #输出:----------- 1122
21
22 del p1.funx #删除

类的一些特殊方法

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

反射

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

转载于:https://www.cnblogs.com/dongxiaodong/p/10495168.html

Python档案袋( 面向对象 )相关推荐

  1. 16.1、python初识面向对象(1)

    初识面向对象 楔子 你现在是一家游戏公司的开发人员,现在需要你开发一款叫做<人狗大战>的游戏,你就思考呀,人狗作战,那至少需要2个角色,一个是人, 一个是狗,且人和狗都有不同的技能,比如人 ...

  2. Python初识面向对象

    一.Python初识面向对象 1.1 封装 class Person:country='中国' #静态字段,可以直接调用def __init__(self,name,pwd): #Python类自带的 ...

  3. Python之面向对象类和对象

    Python之面向对象类和对象 定义一个类:class 定义类的语法: class Test(object):"""类里定义一类事物共同的技能.可以是变量,也可是函数.& ...

  4. Python之面向对象进阶

    Python之面向对象进阶 进阶有:Python 类的成员.成员修饰符.类的特殊成员. 一.类的成员 类的成员可以分为三大类:字段.方法和属性. 注:所有成员中,只有普通字段的内容保存对象中,即:根据 ...

  5. python 内存溢出能捕获吗_从0基础学习Python (19)[面向对象开发过程中的异常(捕获异常~相关)]...

    从0基础学习Python (Day19) 面向对象开发过程中的=>异常 什么是异常 ​ 当程序在运行过程中出现的一些错误,或者语法逻辑出现问题,解释器此时无法继续正常执行了,反而出现了一些错误的 ...

  6. Python之面向对象继承和派生

    Python之面向对象继承和派生 什么是继承: 继承是一种创建新的类的方法.在Python中,新建的类可以继承自一个或多个父类.原始类称为基类或超类. 新建的类称为派生类或子类. Python中类的继 ...

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

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

  8. python是面向对象还是面向过程的语言_关于python是面向对象还是面向过程的分析...

    关于python是面向对象还是面向过程的分析 发布时间:2020-04-07 16:10:55 来源:亿速云 阅读:24 作者:小新 今天小编给大家分享的是关于python是面向对象还是面向过程的分析 ...

  9. Python之面向对象的程序设计

    Python之面向对象的程序设计 优点:解决了程序的扩展性,对某一个对象单独修改.会立刻反应到整个体系中,如对一个游戏中人物参数的特征和技能进行修改都很容易. 缺点:可控性差,无法向面向过程的程序设计 ...

  10. 关于Python的面向对象

    关于Python的面向对象 面向对象 对象(object) 类(class) 方法(def -> function) 装饰器 本文是我第一个关于代码的文章作品,我会逐个解释介绍我所写的内容,尽量 ...

最新文章

  1. mendix归还界面如何只显示登录人自己借阅的书籍,而不显示全部人借阅的书籍
  2. 不懂技术,该如何进行互联网创业?
  3. JAVA I/O使用方法(转)
  4. 1.18 Java匿名类,匿名内部类
  5. 【数据结构与算法】之组成和的完全平方数最少个数的求解思路与算法示例
  6. 把mac地址转换为标准mac地址
  7. 使用IDEA Maven搭建Mybatis环境
  8. xiao77论坛php,论坛
  9. 线程的生命周期 和 线程的通讯
  10. java url 缩略图_java根据url生成网页截图,缩略图 | 学步园
  11. 3s新闻周刊第9期,本期策划:电子地图的出路
  12. 以色列网络武器出口对象国从102个锐减至37个
  13. SAXBuilder的介绍和使用细节
  14. 【无人机】四旋翼飞行器控制、路径规划和轨迹优化(Matlab代码实现)
  15. Android低功耗蓝牙通讯
  16. 微信小程序——图片识别
  17. python大小写转换_Python字母大小写的转换(两种方法)
  18. 【10.24】一个只属于程序员的节日
  19. 揭开虚拟主机供应商的面纱
  20. 如何优雅的将Mybatis日志中的Preparing与Parameters转换为可执行SQL

热门文章

  1. 智能家居 (2) ——设计模式的引入
  2. python 定义method_python进阶14:实例方法和类方法、types.MethodType()
  3. EasyExcel导入的时候报错Caused by: java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/File
  4. Java中Comparator比较器的使用以及使用lamba简化代码
  5. img=img%3e128 matlab,Matlab中一般的数值计算和使用
  6. linux vlc流媒体服务器,vlc media server rtsp 流媒体服务器搭建成功经验分享
  7. 【整理】Spring 常用注解!千万不要错过!
  8. ctrl z撤销后如何恢复_回收站清空后数据如何恢复?
  9. java xml 递归_Java递归遍历XML所有元素
  10. SpringBoot 配置多数据源