python 类的基础详解与应用
作者:不侠居 发布时间:2021-01-04 08:57:37
类的定义
# class是定义类的关键字,ClassName为类的名称
class ClassName:
# 在这里写其他内容
pass
class ClassName(object):
# 在这里写其他内容
pass
这是一个最简单的类定义,在python3后类定义一般都会继承object类,不过不继承也没有多大的问题。
类对象
类对象也称实例
# 这就是创建了一个类对象(实例),a是一个实例也是一个对象
a = ClassName()
变量
类内部里面有:类变量,局部变量,实例变量
类变量
类变量:所有类的实例化对象都同时共享类变量,也就是说,类变量在所有实例化对象中是作为公用资源存在的。
class ClassName(object):
# 定义一个类变量
name = "Tom"
类方法的调用方式有 2 种,既可以使用类名直接调用,也可以使用类的实例化(对象)调用。可以通过类名修改类变量的值,并且修改后,会影响所有的实例化的对象。
# 直接通过类名调用
print(ClassName.name)
# 创建类的实例(对象)
a = ClassName()
b = ClassName()
// 通过类的实例调用
print(a.name)
print(b.name)
ClassName.name = "Tim"
print(a.name)
print(b.name)
运行结果为:
Tom
Tom
Tom
Tim
Tim
但如果实例的类变量的值修改后,在通过类名修改变量的值,不会影响这个实例的类变量。
a = ClassName()
b = ClassName()
a.name = "asf"
ClassName.name = "Pig"
print(a.name)
print(b.name)
ClassName.name = "aaa"
print(a.name)
print(b.name)
运行结果:
asf
Pig
asf
aaa
通过运行结果可知,在对象a改变name值后,再调用Class Name.name = "Pig"
对象a的name变量值没有改变
局部变量
局部变量:局部变量只定义在类方法内,也只能在方法内使用
class ClassName(object):
# 这是一个方法
def function(self):
# 这是一个局部变量
name = "Tom"
name定义在类方法内,所以是局部变量,在外部是无法调用,只能在方法内使用。
实例变量
实例变量:以self.变量名的方式定义的变量,称为实例变量(属性)
class ClassName(object):
# 这是一个实例变量
def function1(self):
self.name = "Tom"
def function2(self):
print(self.name)
只作用于调用方法的对象,可以在其他方法内调用。
className = ClassName()
className.function()
运行结果:
Tom
如果定义在__init__()
方法中的实例变量,可以同过只能通过对象名访问。
class ClassName(object):
def __init__():
self.name = "Tom"
className = ClassName()
print(className.name)
运行结果:
Tom
私有变量
__name
这就是私有变量,在变量前面加两个_
,self.__name
也是私用变量,私有变量在类外部无法直接进行访问。
class ClassName(object):
# 定义了一个私有类变量
__name = "Tom"
ClassName.__name
运行结果:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-8-08830fea0534> in <module>
2 __name = "Tom"
3
----> 4 ClassName.__nameAttributeError: type object 'ClassName' has no attribute '__name'
类的方法
在类里面用def
关键字来定义方法,也叫函数。与普通方法的区别是,必须需要一个self
的参数,self
代表类自身
class ClassName(object):
def function(self,a):
pass
def
为定义函数的关键字,function
为函数的名称,
特殊方法
1.__init__()
用来初始化类的参数一般叫构造方法
这个方法,我们一般类都会用到。
class ClassName(object):
def __init__(self):
self.name = "aaa"
当类实例化时,会自动调用__init__
2.__call__()
将对象当做函数时调用。
class ClassName(object):
def __init__(self):
self.name = "aaa"
def __call__(self):
print("aaa")
c = ClassName() // 类实例化,执行了__init__()方法
c() //执行了__call__()方法
3、__get__()
类作为另一个类的属性时自动调用
class ClassName:
def __init__(self):
pass
def __get__(self,instance, owner):
print("__get__调用了")
class ClassName2:
a = ClassName()
运行结果:
__get__调用了
4、__new__()
是一种负责创建类实例的静态方法,且该方法会优先 __init__()
初始化方法被调用。
。。。还有很多其他的类特殊方法
继承
继承在生活中是获得父辈的财产,在编程语言中是获得父类的所有变量,方法。通过继承从类上衍生出新的类
单继承
简而言之,是继承一个类,所继承的类为基类(父类),继承者为子类
# 父类
class A:
pass
# 子类,继承了A类
class B(A):
pass
上面是个简单的继承,子类在类名后面的括号内写要继承的类的名称。
# 父类
class A:
name = "Tom"
def getName(self):
print("..")
# 子类,继承了A类
class B(A):
pass
b = B()
print(b.name)
b.getName()
运行结果:
Tom
..
发现B类没有写什么变量和方法,却调用了A类的变量(属性)和方法
当然如果不想要父类的某个变量或方法,可以重写这个变量或方法
# 父类
class A:
name = "Tom"
def getName(self):
print("..")
# 子类,继承了A类
class B(A):
def getName(self):
print("bbb")
b = B()
print(b.name)
b.getName()
运行结果:
Tom
bbb
多继承
多继承从名称上来看,是继承了多个类
class A:
pass
class B:
pass
class C(A, B):
pass
上面这个C类同时继承了A类,B类
来源:https://blog.csdn.net/m0_46778548/article/details/120977530
猜你喜欢
- 什么是 conda ?conda 是开源包(packages)和虚拟环境(environment)的管理系统。**packages 管理:*
- 这篇文章主要介绍了python基于event实现线程间通信控制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 如同这个数据结构的名称所说的那样,它记录了每个键值对添加的顺序。d = OrderedDict()d['a'] = 1d[&
- 在进行特征工程、划分数据集的工作中,drop()函数都能派上用场。它可以轻松剔除数据、操作列和操作行等。drop()详细的语法如下:删除行是
- 完整的示例代码如下: 代码如下:<%@LANGUAGE="JAVASCRIPT" CODEPAGE="6
- 代码如下dat=['1', '2', '3', '0', '0
- 本文介绍基于Python语言gdal模块,实现多波段HDF栅格图像文件的读取、处理与像元值可视化(直方图绘制)等操作。另外,基于gdal等模
- 本文实例讲述了python对象转字典的两种实现方式。分享给大家供大家参考,具体如下:一. 方便但不完美的__dict__对象转字典用到的方法
- 使用Resample函数转换时间序列 一、什么是resample函数?它是Python数据分析库Pandas的方法函数。它主要用于
- 偶然发现了for…else…这种用法,使用这个实现了break跳出嵌套的for循环In [31]: for i in range(1,5):
- 一、CNN简介1. 神经网络基础输入层(Input layer),众多神经元(Neuron)接受大量非线形输入讯息。输入的讯息称为输入向量。
- 一、日志输出到文件使用模块:logging可以生成自定义等级日志,可以输出日志到指定路径日志等级:debug(调试日志) < info
- 京东购物车抢购商品1.Python的下载和安装这里由于我们代码是基于Python来执行的所以我们这里需要2个东西:一个是Python本身,另
- 方法调用行为方法调用比其他类型的查找略为复杂一点。 以下是一些注意事项: 在方法查找过程中,如果某方法抛
- 这篇文章主要介绍了Pytest mark使用实例及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要
- 使用python将图片改为灰度图或黑白图有三种方式,分别是是使用cv2库和PIL库来实现,详细过程如下所示。1. 使用cv2库将图片改为灰度
- Python语言的崛起让大家对web、爬虫、数据分析、数据挖掘等十分感兴趣。数据挖掘就业前景怎么样?关于这个问题的回答,大家首先要知道什么是
- 本文实例为大家分享了python使用PIL剪切图片和拼接图片的具体代码,供大家参考,具体内容如下因工作需要,接触到了PIL这个包,看其他人的
- 基础知识实际上,“运算符重载”只是意味着在类方法中拦截内置的操作……当类的实例出现在内置操作中,Python自动调用你的方法,并且你的方法的
- 相关知识点:#key-value#字典是无序的,因为他没有下标,通过key找info={ 'stu01':"liu