python类的基础详解与应⽤
⽬录
类的定义
类对象
变量
类变量
局部变量
实例变量
私有变量
类的⽅法
特殊⽅法
继承
单继承
多继承
类的定义
# 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)
运⾏结果:
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)
运⾏结果:
Tom
bbb
多继承
多继承从名称上来看,是继承了多个类
class A:
pass
class B:
pass
class C(A, B):
pass
上⾯这个C类同时继承了A类,B类
到此这篇关于python 类的基础详解与应⽤的⽂章就介绍到这了,更多相关python 类内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。