python 的类
来源:互联网 发布:unity3d 导入 box 编辑:程序博客网 时间:2024/06/18 07:52
1.类创建
2.类方法
3.类的属性(变量)
4.类的继承
1.类创建
class A: pass #pass 是空语句 ,A是类名
例:A类 的 父类是 B类
class A(B): pass
2.类方法
类方法分为三种:
1.实例方法
2.类方法
3.静态方法
实例方法:
----------------实例方法的特点-------------------------------
0.构造方法 :构造方法就是一个类在实例化的时候一定执行的函数,用于初始化实例,默认的构造方法是空
1.实例方法的第一个参数必须是 self ,且不能省略
2.参数 self 的作用是 表示 实例本身。例如 调用实例的对象x,则是 self.x
3.实例方法的调用需要实例化类,并以 实例名.方法名(参数) 形式调用
构造方法:
构造方法的名字为 __init__(),如:
class Demo: def __init__(self,x,y) self.x = x self.y = y上面的构造方法表示 实例化Demo类时,若传给他2个参数 x,y。则把x,y的指 赋给Demo实例的x和y变量。
----------------以上都是实例方法-------------------------------
类方法:
1.类方法是属于类的方法,可以直接通过类名进行调用,如: 类名.方法名()
2.实例方法的默认参数是 self,表示实例本身,而类方法的默认参数是 cls,表示类本身。
3.类方法定义之前要在上一行写上 @classmethod 修饰
4.类方法可以直接通过类名调用,但也可以通过 实例名调用
类方法的好处是:通过默认传入表示类的参数 cls,可以获取到类的一些属性,如:
class Demo: @classmethod def fun(cls): print(cls.__name__) # cls.__name__ 表示类名Demo.fun()#打印结果:Demo
静态方法:
1.定义静态方法之前要在其上一个写上 @staticmethod
2.静态方法是没有默认参数的 (没有表示实例的self,也没有表示类的 cls)
3.静态方法也可以通过类名或实例名调用
三种方法代码:
class Demo: def instanceM(self): print('this is instance method') @classmethod def classM(cls): print('this is class:%s,this is class method'%(cls.__name__)) @staticmethod def staticM(): print('this is static method')d = Demo() #要调用实例方法,先实例化d.instanceM() # 调用实例方法Demo.classM() #调用类方法Demo.staticM() #调用静态方法'''打印结果:this is instance methodthis is class:Demo,this is class methodthis is static method'''
3.类的属性(变量)
所谓类的属性 就是变量的一种状态。一个变量(例如name)可以表示一个类的一个属性(name),也可以表示不同实例各自的属性(name)
类的属性分两种:(实例属性和类属性)
类属性:表示一个类中的全部实例都有的这个特性,即所有实例都共有这么一个变量。通过 类名.变量名 操作
实例属性:实例属性即同一个类的不同实例,其值是不想关联也不互相影响的。实例属性用 self.变量名 操作 或 通过 实例名.变量名操作
注意:在实例化的过程中,类的所有以初始化属性都会被拷贝一份副本到实例当中去。
1.当通过类属性来修改一个类变量a时,该类的所有实例a的值都会变
2.但实力属性的优先级比类属性高,当一个实例已经用实例属性来修改一个变量a为2时,即使接着再用类属性来修改a,该实例a的值仍为2
class Demo: num = 1 #类的属性num def __init__(self,x): self.x = x #实例属性x def changCLASS(self): Demo.num = 10 #修改类属性(通过类名调用) def changINS(self): #修改实例属性,通过self调用 self.num = 2d1 = Demo(2)d2 = Demo(3)d1.changINS() #表示d1 修改自己的 num,d2的num是没变的,实例属性的优先级比类属性高若实力属性已经设定了变量num为2 #接着即使再通过修改类属性的方式修改这个变量为10,该实例的num还是2d1.changCLASS() #修改 类属性print(d1.num) #2print(d2.num) #10
4.类的继承
子类继承父类后,就拥有了父类的属性和方法,但不能继承父类的私有属性和方法。(属性名或方法名前加两个下划线__表示私有)
class A: __privateCount = 0 # 私有变量 publicCount = 0 # 公开变量class B(A): #B是A的子类 passb = B() #实例化Bprint(b.publicCount)print(b.__privateCount) #报错,因为子类不能继承父类的私有成员
python允许多继承操作,即一个子类可以继承多个父类。那有些问题就来了。
1.当多个父类中的属性或方法重名时,怎么办呢?
在python3中有条规则,从继承的父类顺序(左到右)来搜索方法
如:
class p1: def print(self): print('p1');class p2: def print(self): print('p2')class c1(p1,p2): def print(self): print('c1')class c2(p1,p2): passif __name__ == '__main__': c1 = c1() c2 = c2() c1.print() #c1 c2.print() #p1
- Python--day13 python的类
- 【Python】Python学习笔记(类的继承)
- 【Python】Python的类、对象、属性、方法
- Python--day14 python的类2
- [Python]类的基础知识
- Python的类
- Python类的继承
- python的类
- python类的语法
- Python的类
- Python的str类
- [Python]类的基础知识
- python 类的使用
- python 类的使用
- python类的学习
- Python的类
- [Python]类的基础知识
- python类的继承
- JDBC连接MySql入门
- 详解log4j2(下)
- Java 反射的破坏性
- ToggleButton、Switch、CheckBox小结
- select、date、iterator、if<s:标签>的使用
- python 的类
- 虚拟机内存结构概述
- 如何在Unity中制作VR全景动画
- F4_Flash模拟EEPROM
- 漂泊的足迹
- intellij idea svn 修改文件后,父文件夹也标注修改
- 详解log4j2(下)
- Python模块random
- SpringMVC RestFul方式提交