python 类定义,python类定义的讲解
本文主要介绍Python类的定义和使用细节。在Python中,类表示具有相同属性和方法的对象的集合。文章重点介绍了题目的相关信息,有需要的朋友可以参考一下。
00-1010一、前言二、定义类三、创建实例四、魔术方法——_ init _()五、创建类成员和访问1。创建实例方法并访问2。创建数据成员和访问6。存取限制
目录
在Python中,类表示具有相同属性和方法的对象的集合。使用类时,需要先定义类,然后创建类的实例,通过实例可以访问类中的属性和方法。
一、前言
在Python中,类的定义使用class关键字来实现,语法如下:
类类名:
"" "类" "的帮助信息#类文本字符串
语句#类体
参数说明:
ClassName:用于指定类名,通常以大写字母开头。如果类名包含一个单词,第二个单词的第一个字母也要大写。这种命名方法也叫“驼峰命名法”,是一种通行的做法。当然也可以根据自己的习惯来命名,但是一般建议按照惯例来命名。“类的帮助信息”:用于指定类的文档字符串。定义字符串后,创建类的对象时,输入类名和左括号“(”后会显示信息。statement:主要由类变量(或类成员)、方法、属性等定义语句组成。如果在定义类的时候没有考虑到类的具体功能,也可以直接使用类体中的Pass语句来代替。Geese:级
野鹅
及格
二、定义类
一旦定义了实例,实际上并没有创建实例。这就像一辆汽车的设计。设计可以告诉你车是什么样子,但设计本身不是车。不能开,只能用来造真车,可以用来造很多车。那么如何创建一个实例呢?
class语句本身并不创建该类的任何实例。所以在一个类的定义完成之后,就可以创建该类的一个实例,也就是实例化该类的对象。创建类的实例的语法如下:
类名(参数列表)
参数说明:
ClassName:是必需的参数,用于指定类。parameterlist:可以选择参数。创建类时,不创建__init__()方法,或者__init__()方法只有一个self参数时,可以省略parameterlist。例如,创建上面Geese类的实例,可以使用下面代码:
#创建一个类
Geese:级
野鹅
及格
#创建实例
雁=鹅()
印刷(野鹅)
执行上面代码后,将显示类似下面的内容:
从上面的执行结果可以看出,wildGoose是鹅类的一个实例。
三、创建类的实例
创建一个类后,该类通常会自动创建一个__init__()方法。这个方法是一个特殊的方法,类似于JAVA语言中的构造方法。每当创建一个类的新实例时,Python会自动执行它。init()方法必须包含一个参数,并且它必须是第一个参数。self参数是对实例本身的引用,用于访问类中的属性和方法。
当调用方法时自动执行。
传递实际参数self。因此,当__init__()方法只有一个参数时,在创建类的实例时,就不需要指定参数了。
例如,下面乃然以大雁为例,并创建__init__()方法,代码如下:
# 创建类class Geese:
"""大雁类"""
def __init__(self):
print("我是大雁类")
wildGoose = Geese()
运行以上代码,将输出以下内容:
常见错误:
在为类创建__init__()方法时,在开发环境中运行下面的代码:
# 创建类class Geese:
"""大雁类"""
def __init__(): # 构建方法
print("我是大雁类")
wildGoose = Geese() # 创建大雁实例
运行上述代码,将抛出以下异常:
在__init__()方法中,除了self参数外,还可以自定义一些参数,参数间使用逗号,进行分隔。例如,下面的代码将在创建__init__()方法时,再指定3个参数,分别是beak、wing和claw:
# 创建类class Geese:
"""大雁类"""
def __init__(self, beak, wing, claw):
print("我是大雁类!我有一下特征:")
print(beak)
print(wing)
print(claw)
beak_1 = "喙"
wing_1 = "翅膀"
claw_1 = "爪"
wildGoose = Geese(beak_1, wing_1, claw_1)
运行上面代码,将显示以下结果:
五、创建类的成员并访问
类的成员主要由实例方法和数据成员组成。在类中创建了类的成员后,可以通过类的实例进行访问。下面进行详细介绍。
1.创建实例方法并访问
所谓实例方法是指在类中定义函数。该函数是一种在类的实例上操作的函数。同__init__()方法一样,实例方法的第一参数必须是self,并且必须包含一个self参数。
创建实例的方法的语法格式如下:
def functionName(self,parameterlist):block
参数说明:
- functionName:用于指定方法名,一般使用小写字母开头。
- self:必要参数,表示类的实例,其名称可以是self以外的单词,使用self只是一个习惯而已。
- parameterlist:用于指定除self参数以外的参数,各参数间使用逗号,进行分隔。
- block:方法体,实现的具体功能
实例创建完成后,可以通过类的实例名称和点(.)操作符进行访问。
具体的语法格式如下:
instanceName.functionName(parametervalue)
参数说明:
- instanceName:为类的实例名称
- functionName:为要调用的方法名称
- parametervalue:表示为方法指定对应的实际参数,其值的个数与创建实例方法中parameterlist的个数相同。
2.创建数据成员并访问
数据成员是指类中定义的变量,即属性,根据定义位置,又可以分为类属性和实例属性,下面分别进行介绍。
类属性:类属性是指在定义类中,并且在函数体外的属性。类属性可以在类的所有实例之间共享值,也就是在所有实例化的对象中公用。
例如,定义一个雁类,在该类中定义3个属性,用于记录雁的特征,代码如下:
class Geese:"""大雁类"""
beak_1 = "喙,比较尖" # 定义类属性(喙)
wing_1 = "翅膀,比较大"
claw_1 = "爪,行走自如"
def __init__(self):
print("我是大雁类!我有一下特征:")
print(Geese.beak_1) # 输出喙的属性
print(Geese.wing_1)
print(Geese.claw_1)
创建上面的类Geese,然后创建类的实例,代码如下:
goose = Geese() # 实例化一个雁的对象
运行上面代码创建Geese类的实例后,将显示以下内容:
实例属性:
实例属性是指定义在类的方法中的属性,只作用于当前实例中。
例如,定义一个雁类Geese,在该类的__init__()方法中定义3个实例属性,用于记录雁类的特征,代码如下:
# 创建类class Geese:
"""大雁类"""
def __init__(self):
self.beak_1 = "喙,比较尖" # 定义实例属性(喙)
self.wing_1 = "翅膀,比较大"
self.claw_1 = "爪,行走自如"
print("我是大雁类!我有一下特征:")
print(self.beak_1) # 输出喙的属性
print(self.wing_1)
print(self.claw_1)
创建上面的类Geese,然后创建类的实例,代码如下:
goose = Geese() # 实例化一个雁的对象
运行上面代码创建Geese类的实例后,将显示以下内容:
说明:
实例属性只能通过实例名访问。如果通过类名访问实例属性,将抛出如图所示的异常。
对于实例的属性也可以通过实例名称修改,与类不同,通过实例名称修改实例属性后,并不能影响该类的其他实例中相应的实例属性值。例如,定义一个雁类,并在__init__()方法中定义一个实例属性,然后创建两个Geese类的实例,并修改一个实例属性,最后分别输出实例属性,代码如下:
# 创建类class Geese:
"""大雁类"""
def __init__(self):
self.beak_1 = "喙,比较尖" # 定义实例属性(喙)
print(self.beak_1)
goose1 = Geese() # 创建Geese实例1
goose2 = Geese() # 创建Geese实例2
goose1.beak_1 = "喙,比长鹅尖" # 修改实例属性
print("goose1的beak_1属性:", goose1.beak_1)
print("goose2的beak_1属性:", goose2.beak_1)
运行上面代码,将显示以下内容:
六、访问限制
在类的内部可以定义属性和方法,而在类的外部则可以直接调用属性或方法来操作数据,从而隐藏了类内部的复杂逻辑。但Python并没有对属性和方法的访问权限进行限制。为了保证类内部的某些属性或方法不被外部所访问,可以在属性或方法名前面添加单下划线(_foo)、双下划线(__foo)或者首尾加双下划线( __ foo __),从而限制访问权限。其中,单下划线、双下划线、首尾双下划线的作用如下:
- __ foo __ :首尾双下划线表示定义特殊方法,一般是系统定于名字,如__init__()。
- _foo:以单下划线开头的表示protected(保护)类型的成员,只允许类本身或子类访问,但不能使用 from module impor语句导入。
例如,创建一个Swan类,定义保护属性_neck_swan,并在__init__()方法中访问该属性,然后创建Swan类的实例,并通过实例名输出保护属性_neck_swan,
代码如下:
class Swan:"""天鹅类"""
_neck_swan = "天鹅脖子长" # 创建私有属性
def __init__(self):
print("__init__():", Swan._neck_swan)
swan = Swan() # 创建Swan类
print("直接访问:", swan._neck_swan)
执行以上代码,将显示以下内容:
从上面的运行结果中可以看出:保护属性可以通过实例名访问。
__foo:双下划线表示private(私有)类型的成员,只允许定义该方法的类本身进行访问,而且也不能通过类的实例进行访问,但是可以通过类的实例名.类名 __xxx方式访问。
例如,创建一个Swan类,定义保护属性__neck_swan,并在__init__()方法中访问该属性,然后创建Swan类的实例,并通过实例名输出保护属性__neck_swan,
代码如下:
# 创建类class Geese:
"""大雁类"""
def __init__(self, beak, wing, claw):
print("我是大雁类!我有一下特征:")
print(beak)
print(wing)
print(claw)
beak_1 = "喙"
wing_1 = "翅膀"
claw_1 = "爪"
wildGoose = Geese(beak_1, wing_1, claw_1)
运行上面代码,将输出如图所示的结果:
从上面的运行结果可以看出:私有属性可以通过类名.属性名方式访问,也可以通过实例名.类名__xxx方式访问,但是不能直接通过实例名.属性名方式访问。
到此这篇关于Python类的定义和使用详情的文章就介绍到这了,更多相关Python类的定义内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。