Python档案袋( 面向对象 )
类即是一个模型,根据模型建立起不同的对象,对象间拥有共同的一些属性
简单的类:
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档案袋( 面向对象 )的更多相关文章
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- Python的面向对象3
接下来,我们接着讲Python的面向对象,在上一次的博客中,我们详细介绍了类与对象的属性,今天,我们来详细介绍一下面向对象中的方法! 1.定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外 ...
- Python的面向对象2
我们接着讲解Python的面向对象 1.初始化实例属性 在现实生活中,一种类型的实例会具有相同的某些属性,把这些实例划分为一个类型,则这些实例必然有相似的部分.但是,在创建实例之后,我们一个一个的为实 ...
- Python的面向对象1
今天,我们来介绍Python的面向对象编程,其实面向对象并不陌生,在C++ ,Java ,PHP中也有大量使用! 好了,我们来步入正题! 那什么是面向对象编程呢? 1. 面向对象编程是一种程序设计 ...
- My way to Python - Day05 - 面向对象-思维导图
My way to Python - Day05 - 面向对象 思维导图
- Python进阶---面向对象的程序设计思想
Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
- Python之面向对象一
引子 小游戏:人狗大战 角色:人和狗 角色属性:姓名,血量,战斗力和性别(种类) 技能:打/咬 用函数实现人打狗和狗咬人的情形 def Dog(name,blood,aggr,kind): dog = ...
- python基础——面向对象进阶下
python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...
- python基础——面向对象进阶
python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...
- python基础——面向对象的程序设计
python基础--面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
随机推荐
- Core 2.0使用Nlog记录日志+Mysql
一.先创建一个Core2.0的项目,并在NuGet中引入3个类库文件 MySql.Data.dll NLog.dll NLog.Web.AspNetCore.dll 二.创建一个nlog.config ...
- 【webpack系列】从零搭建 webpack4+react 脚手架(二)
html文件如何也同步到dist目录?bundle.js文件修改了,万一被浏览器缓存了怎么办?如何为导出的文件加md5?如何把js引用自动添加到html?非业务代码和业务代码如何分开打包?如何搭建开发 ...
- 建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 它可以将多个简单的对象一步一步构建成一个复杂的对象. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 主要解决:主要解决在软 ...
- session的几种模式
https://www.cnblogs.com/panchunting/archive/2012/06/25/ASPNET_Session_Mode.html token的生成和应用 session和 ...
- 远程服务器数据交互技术:rsync,scp,mysqldump
远程服务器间数据文件交互,可用技术:rsync,scp 速度:rsync是非加密传输,比scp快 安全:scp为加密传输 备份体量:rsync只更新差异部分,可以做增量和全量备份.scp为全量 传输方 ...
- CICD - Teamcity 配置之二:SSIS Package 自动部署
首先需要将SSIS Project check in 到 git 中, Teamcity 会到 git 上取到code, build, 然后publish 到指定的服务器上,比如:Dev, QA, S ...
- docker报错Service 'pwn_deploy_chroot' failed to build: Get https://registry-1.docker.io/v2/library/ubuntu/manifests/16.04:net/http: request canceled
这几天碰到师傅让我帮忙做pwn题环境,结果遇到了坑 第一种方法是:https://blog.csdn.net/zhaoyayua/article/details/60141660 解决办法是执行 vi ...
- rhel 7安装Mysql
rhel7安装mysql服务 环境: 1)rhel 7虚拟机 2)配置完163网络yum源,并且保证网络通畅 安装过程: 1) 安装Mysql和Mysql-devel 命令:yum install m ...
- Android Training
Building Apps with Content Sharing Simple Data --> Intent && ActionProvider 介绍如何让应用程序共享简单 ...
- android 第三次作业
android studio音乐播放器 一.实现功能: 1.读取本地SD中的所有音频文件 2.歌单列表展示,并显示音频具体信息 3.进度条显示当前播放进度,可滑动加速 4.点击歌单进行播放 5.实现暂 ...