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 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
随机推荐
- Linux时间同步问题
一.调整时区 sudo tzselect 选择时区 Asia-> China-> Beijing Time->Yes 二.同步时间 ntpdate cn.pool.ntp.org 三 ...
- java gui 2
1,编写程序,随机生成两个数,用户输入两个数的和,并进行评判.程序的初始界面如下: 点击“获取题目”,随机生成两个100以内的int类型的数,界面如下: 提示: (1)使用java.util.Rand ...
- WPF管理系统自定义分页控件 - WPF特工队内部资料
最近做一个演示的管理系统项目,需要用到分页控件,在网上找了很多,依然找到与UI模版匹配的,最后干脆自己写一个. 分页控件分析: 1.分页控件分简单显示和复杂显示两种: 2.包含上一页.下一页以及页码明 ...
- 解决vscode格式化vue文件出现的问题
遇到的问题 使用vscode开发vue项目的时候,格式化vue文件,与自己配置的eslint标准会有冲突. 引号问题:单引号变双引号 分号问题:行末是否加分号.自动加/减分号 当然还会有其他个性化冲突 ...
- 三大家族(offset、scroll、client)
offset.scroll.client三大家族 offset家族 offsetWidth 与 offsetHeight offset 偏移 用于获取元素自身的位置和大小 offsetWidth和of ...
- idea通过mapper快速定位到xml文件
1.点击File找到设置(Settings) 2.点击Plugins下的 Browse respositories 3.在搜索栏搜索mybatis ,选中 Free Mybatis plugin——i ...
- Little Sub and Isomorphism Sequences ZOJ - 4089
ZOJ - 4089 思路:可以反正 最长重构序列必然符合 此模式 x + { } 与 { } + x 那么 题意转化为了 找两个距离最长的相同的数.eeee 先离散化 然后 ...
- json格式new Date()的一个小坑
见图:JSON.stringify( new Date(Date.parse('xxxx-xx-xx'))) 若是传的日期,在10号前,要进行转换.
- WPF RadioButton的绑定
1. 枚举类 public enum EnumDataTypes { Simulation, Test } 2. 枚举型与布尔型的转换 public class EnumToBooleanConver ...
- Y1吐槽002 情绪
看了石原里美的<高岭之花>,虽然全程基本都是看不懂的,但是风间直人对喜怒哀乐里面的怒和哀的分析还是深有感触. 悲哀的人心里有爱 愤怒的人心里有恨,一个人装了太多的恨的话,别人是拯救不了的: ...