python 类的基础详解与应用

 更新时间:2021年11月09日 09:25:17   作者:不侠居  
类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员

类的定义

# 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.__name

AttributeError: 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类

到此这篇关于python 类的基础详解与应用的文章就介绍到这了,更多相关python 类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python async+request与async+aiohttp实现异步网络请求探索

    Python async+request与async+aiohttp实现异步网络请求探索

    这篇文章主要介绍了Python async+request与async+aiohttp实现异步网络请求探索,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • Python数据处理Pandas库的使用详解

    Python数据处理Pandas库的使用详解

    这篇文章主要为大家详细介绍了pandas库的使用方法,包括数据导入与导出、数据查看和筛选、数据处理和分组操作等,感兴趣的小伙伴可以了解一下
    2023-07-07
  • Python的UTC时间转换讲解

    Python的UTC时间转换讲解

    今天小编就为大家分享一篇关于Python的UTC时间转换讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Python连接Mysql实现图书借阅系统

    Python连接Mysql实现图书借阅系统

    这篇文章主要为大家详细介绍了Python连接Mysql实现图书借阅系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • python实现去掉字符串中的\xa0、\t、\n

    python实现去掉字符串中的\xa0、\t、\n

    这篇文章主要介绍了python实现去掉字符串中的\xa0、\t、\n方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • tensorflow+k-means聚类简单实现猫狗图像分类的方法

    tensorflow+k-means聚类简单实现猫狗图像分类的方法

    这篇文章主要介绍了tensorflow+k-means聚类简单实现猫狗图像分类,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • 解决python删除文件的权限错误问题

    解决python删除文件的权限错误问题

    下面小编就为大家分享一篇解决python删除文件的权限错误问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • Python爬取城市租房信息实战分享

    Python爬取城市租房信息实战分享

    这篇文章主要介绍了Python爬取城市房租房信息实战分享,先单线程爬虫,测试可以成功爬取之后再优化为多线程,最后存入数据库,需要的小伙伴可以参考一下的相关资料
    2022-04-04
  • Python和Bash结合在一起的方法

    Python和Bash结合在一起的方法

    这篇文章主要介绍了Python和Bash结合在一起的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-11-11
  • Python实现简单的猜单词

    Python实现简单的猜单词

    这篇文章主要为大家详细介绍了Python实现简单的猜单词,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06

最新评论