Python档案袋( 面向对象 )

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

简单的类:

 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/278126.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript中的后退和刷新

转自&#xff1a;https://www.cnblogs.com/tylerdonet/p/3911303.html <input typebutton value刷新 οnclick"window.location.reload()"><input typebutton value前进 οnclick"window.history.go(1)"><input typebutton value后退 οncl…

第四周

7-2 选择法排序 &#xff08;20 分) 本题要求将给定的n个整数从大到小排序后输出。 输入格式&#xff1a; 输入第一行给出一个不超过10的正整数n。第二行给出n个整数&#xff0c;其间以空格分隔。 输出格式&#xff1a; 在一行中输出从大到小有序的数列&#xff0c;相邻数字间有…

checkPathValidity 检查所有agent的corridor的m_path是否有效

在checkPathValidity&#xff08;检查所有agent的corridor的m_path是否有效&#xff09; 如果是无效的要进行重新设置并且设置replan 首先获得第一个polygon&#xff0c;m_path[0] 这里&#xff0c;因为addagent的时候&#xff0c;ag->corridor.reset(ref, nearest); m_path…

来谈谈JAVA面向对象 - 鲁班即将五杀,大乔送他回家??

开发IDE为Eclipse或者MyEclipse。 首先&#xff0c;如果我们使用面向过程的思维来解决这个问题&#xff0c;就是第一步做什么&#xff0c;第二步做什么&#xff1f; 鲁班即将五杀&#xff0c;大乔送他回家 这个现象可以简单地拆分为两步&#xff0c;代码大概是这个样子的: publ…

Vue 教程第一篇——基础概念

认识 Vue 关于 Vue 的描述有不少&#xff0c;不外乎都会拿来与 Angular 和 React 对比&#xff0c;同样头顶 MVVM 双向数据驱动设计模式光环的 Angular 自然被对比的最多&#xff0c;但到目前为止&#xff0c;Angular 在热度上已明显不及 Vue&#xff0c;性能已成为最大的诟病。…

Microsoft Teams的Outgoing Webhook开发入门

Microsoft Teams的应用程序有几种形式&#xff1a; TabsBotsConnectorsMessaging extensionsActivity feed integrationsOutgoing web hooks 这篇我们主要介绍如何使用 ASP.NET Core来开发最简单的Outgoing web hook。 什么是outgoing webhook Outgoing webhooks allow you t…

0418 jQuery笔记(添加事件、each、prop、$(this))

1.添加点击事件、each、prop、$(this) 1 //全选框的被动操作2 //定义一个标志保存最终状态3 var flag false;4 //为每一个选择框添加点击事件&#xff0c;数组.click()5 $(.chex).click(function(){6 //遍历数组&#xff0c;数组.each()7 …

[WC2008]游览计划(斯坦纳树)

[Luogu4294] 题解 : 斯坦纳树 \(dp[i][j]\) 表示以\(i\)号节点为根&#xff0c;当前状态为\(j\)&#xff08;与\(i\)连通的点为\(1\)&#xff09; 当根\(i\)不改变时状态转移方程是&#xff1a; \(dp[i][j] \min_{s \in j}\{dp[i][s] dp[i][\complement_js] - val[i]\}\) 当根…

使用dotnet template快速开发Microsoft Teams Outgoing Web Hook

在上一篇文章中&#xff0c;我们一步步从无到有在Microsoft Teams中开发了一个简单的Outgoing Webhook&#xff0c;并和我们本地的Web API应用程序产生交互&#xff0c;总结起来的步骤大概如下&#xff1a; 导航到“团队” Tab页&#xff0c; 选中需要建立的Channel, 选中“应…

[Swift]LeetCode1013. 将数组分成和相等的三个部分 | Partition Array Into Three Parts With Equal Sum...

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…

京津冀产业协同升级 智慧城市等高端产业需求遇热

云计算、智慧交通、城市环保科技等高端智慧城市产业项目正成为京津冀产业协同的新关注点。 21日&#xff0c;在由北京市经信委、天津市工信委、河北省工信厅联合组织的京津冀产业协同发展招商推介专项行动上&#xff0c;超过200家与会企业共完成产业对接项目额达311.7亿元。与以…

Microsoft Teams:删除成员账户其历史聊天会发生什么?

介绍&#xff1a; 此博客文章的目的是演示从Office 365删除用户的账号后&#xff0c;此用户在Microsoft Teams群聊和私聊中的历史聊天记录会发生什么改变。 以下是Microsoft Teams聊天对话&#xff0c;其中Adele和其他团队成员正在参与对话&#xff1a; 此外, Adele和Mega还在…

PostgreSQL Huge Page 使用建议 - 大内存主机、实例注意

标签 PostgreSQL , Linux , huge page , shared buffer , page table , 虚拟地址 , 物理地址 , 内存地址转换表 背景 当内存很大时&#xff0c;除了刷脏页的调度可能需要优化&#xff0c;还有一方面是虚拟内存与物理内存映射表相关的部分需要优化。 1 脏页调度优化 1、主要包括…

Microsoft Teams:团队Owner离开公司后,我们该怎么做?

您是否曾在这么一个团队里&#xff0c;该团队唯一有Owner权限的人离开了公司&#xff1f;不幸的是,如果这个人不再在公司里&#xff0c;您可能觉得没有办法让其他团队成员再成为team的owner。我有一个简单易用的解决方案&#xff0c;但您需要成为Office 365租户的Admin或联系你…

python网络编程-socket编程

一、服务端和客户端 BS架构 &#xff08;腾讯通软件&#xff1a;serverclient&#xff09; CS架构 &#xff08;web网站&#xff09; C/S架构与socket的关系&#xff1a; 我们学习socket就是为了完成C/S架构的开发 二、OSI七层模型 互联网协议按照功能不同分为osi七层或tcp/ip五…

使用PowerShell配置Microsoft Teams

作为 IT 专业人员, 我一直在寻找自动化任务的方法, 并使日常操作简单。当使用Microsoft Teams时, 是否能够在团队中自动创建团队&#xff0c;渠道和设置对于Microsoft Teams组建的成功与否至关重要。PowerShell对Microsoft Teams的支持使您可以做到这一点&#xff0c;它为我提供…

常见Kotlin高频问题解惑

在笔者的Kotlin交流群里&#xff0c;不少同学反复遇到了一些相似的问题。这些问题大都比较基础&#xff0c;但又容易产生误解。因此&#xff0c;我决定写一篇文章&#xff0c;整理群里同学遇到的一些问题 变量和常量的使用 在Kotlin语言中&#xff0c;我们使用var声明变量&…

关于神经网络训练的一些建议笔记

关于网络训练时的参考建议&#xff1a; 1.train loss不断下降&#xff0c;test loss不断下降&#xff0c;网络正在学习 2.train loss不断下降&#xff0c;test loss趋于不变&#xff0c;网络过拟合&#xff0c;需要增大数据&#xff1b;减小网络规模dropout&#xff1b;权重衰减…

Microsoft Teams的保留策略

Microsoft Teams保留策略现在可在Office 365安全性和合规性中心里进行配置 今天&#xff0c;我们很自豪地宣布&#xff0c;我们正在开始推出针对Microsoft Teams的保留策略。 推出预计将在未来几周内完成。 通过此次发布&#xff0c;Teams管理员可以使用Office 365安全性和合规…

八年溯源,如何巧搭区块链

虎嗅注&#xff1a;区块链正在逐步商业化&#xff0c;但最大的挑战是共识。 为什么这样说&#xff1f;因为商品的溯源防伪业务在过去正是因为缺乏信任感而没有得到普及&#xff0c;这是每个溯源从业者最大的感受。 在虎嗅虎跑团每两周一次线上分享会上&#xff0c;溯源链创始人…