类的定义和使用
Posted 7188-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了类的定义和使用相关的知识,希望对你有一定的参考价值。
一、类相关知识
1.1初识类
python中声明函数和声明类相似.
声明函数:
def function(args):
‘函数文档字符串‘
函数体
声明类:
class ClassName: # 指定类名
‘‘‘类的帮助信息‘‘‘ # 类的文档字符串
statement # 类体
1.2创建类的实例
ClassName(parameterlist)
ClassName:必选参数,指定的类。
parameterlist:可选参数:当创建一个类时,没有创建__init__()方法,或者当__init__()方法中只有一个self参数时,可省略。
以大雁为例声明一个类:
class Geese:
‘‘‘大雁类‘‘‘
pass
wildGoose = Geese() #创建大雁的实例
print(wildGoose)
输出:
<main.Geese object at 0x00000246CCDCD648>
1.3__int__()
创建类后,类通常会自动创建一个__init__()方法。该方法必须包含一个self参数,并且必须为第一个参数seIf参数是一个指向实例本身的引用,用于访问类中的属性和方法。在方法调用时会自动传递实际参数self。因此,当__init__()方法只有一个参数时,在创建类的实例时就不需要指定实际参数了。
class Geese:
‘‘‘大雁类‘‘‘
def __init__(self): # 必须添加self
print("我是大雁类!")
wildGoose = Geese()
二、创建类的属性并访问
类的成员主要由实例方法和数据成员组成。在类中创建了类的成员后,可以通过类的实例进行访问.
2.1创建实例方法并访问
所谓实例方法是指在类中定义的函数。该函数是一种在类的实例上操作的函数。同__init__()方法一样,实例方法的第一个参数必须是self,并且包含一个self参数.
def functionName(self, parameterlist):
block
functionName:用于指定方法名,一般使用小写字母开头.
self:必要参数,表类的实例,其名称可以是self以外的单词.
parameterlist:用于指定除self参数以外的参数,各参数之间使用“,”进行分隔.
block:方法体,实现的具体功能.
实例方法创建后,可以通过类的实例名称和点(.)操作符进行访问.
instanceName.functionName(parametervalue)
functionName: 类的实例名称 function:调用的方法名称.
parametervalue:方法指定对应的实际参数,其值的个数与创建实例方法中parameterlist的个数相同.
2.2创建数据成员并访问
数据成员是指在类中定义的变量,即属性,根据定义位置,又可以分为类属性和实例属性.
2.2.1类属性
类属性是指在定义在类中,并且在函数体外的属性.类属性可以在类的所有实例之间共享值,也就是在所有实例化的对象中公用.
类属性可以通过类名称或者实例名访问.
class Geese:
‘‘‘雁类‘‘‘
neck = "脖子较长" # 定义类属性(脖子)
wing = "振翅频率高" # 定义类属性(翅膀)
leg = "腿位于身份的中心支点,行走自如" # 定义类属性(腿)
def __init__(self): # 实例方法(相当于构造方法)
print("我属于雁类!我有以下特征:")
print(Geese.neck) # 输出脖子的特征
print(Geese.wing) # 输出翅膀的特征
print(Geese.leg) # 输出腿的特征
# 创建上面的类Geese,然后创建该类的实例。
geese = Geese() # 实例化一个雁类的对象
输出:
我属于雁类!我有以下特征:
脖子较长
振翅频率高
腿位于身份的中心支点,行走自如
2.2.2类属性的增删改查.
class Geese:
‘‘‘雁类‘‘‘
wing = "振翅频率高"
def __init__(self, sex):
self.sex = sex
def gender(self):
print("我属于%s!" %(self.sex))
# 查看类属性
print(Geese.wing)
# 输出:
# 振翅频率高
# 修改类属性
Geese.wing = ‘翅膀长而尖‘
print(Geese.wing)
# 输出:
# 翅膀长而尖
# 删除类属性
del Geese.wing
# 增加类属性
Geese.wing = ‘振翅频率高‘
Geese.neck = ‘脖子较长‘
print(Geese.__dict__) # 查看包含对象本身定义的所有属性
# 输出:
# {‘__module__‘: ‘__main__‘, ‘__doc__‘: ‘雁类‘, ‘__init__‘: <function Geese.__init__ at 0x000001FB48A0C1F8>,‘gender‘: <function Geese.gender at 0x000001FB48A0C288>, ‘__dict__‘: <attribute ‘__dict__‘ of ‘Geese‘ objects>,‘__weakref__‘: <attribute ‘__weakref__‘ of ‘Geese‘ objects>, ‘wing‘: ‘振翅频率高‘, ‘neck‘: ‘脖子较长‘}
2.2.3实例属性
实例属性是指定义在类的方法中的属性,只作用于当前实例中,实例属性只能通过实例名访问.
class Geese:
‘‘‘雁类‘‘‘
def __init__(self): # 实例方法(相当于构造方法)
self.neck = "脖子较长" # 定义实例属性(脖子)
self.wing = "振翅频率高" # 定义实例属性(翅膀)
self.leg = "腿位于身份的中心支点,行走自如" # 定义实例属性(腿)
print("我属于雁类!我有以下特征:")
print(self.neck) # 输出脖子的特征
print(self.wing) # 输出翅膀的特征
print(self.leg) # 输出腿的特征
# 创建上面的雁类Geese,然后创建该类的实例。
geese = Geese() # 实例化一个雁类的对象
输出:
我属于雁类!我有以下特征:
脖子较长
振翅频率高
腿位于身份的中心支点,行走自如
对于实例属性也可以通过实例名称修改,与类属性不同。
class Geese:
‘‘‘雁类‘‘‘
def __init__(self, sex): # 实例方法(相当于构造方法)
self.neck = "脖子很长" # 定义实例属性(脖子)
self.sex = sex
print(self.neck) #输出脖子的特征
def gender(self):
print("我属于%s!" %(self.sex))
geese1 = Geese(‘雄性‘) # 创建Geese类的实例1
# 输出: # 会自用运行类中的语句
# 脖子很长
geese2 = Geese(‘雌性‘) # 创建Geese类的实例2
# 输出:
# 脖子很长
geese1.neck = "脖子没有天鹅的长" # 修改实例属性
print("geese1的neck属性:", geese1.neck)
# 输出:
# geese1的neck属性: 脖子没有天鹅的长
print(geese1.gender) # gender不加"()"可以查看实例属性
# 输出:
# <bound method Geese.gender of <__main__.Geese object at 0x000001A958FB9D48>>
geese1.wing = ‘翅膀长而尖‘ # 添加实例属性
print(geese1.__dict__)
# 输出:
# {‘neck‘: ‘脖子没有天鹅的长‘, ‘sex‘: ‘雄性‘, ‘wing‘: ‘翅膀长而尖‘}
del geese1.wing # 删除实例属性
print(geese1.__dict__)
# 输出:
# {‘neck‘: ‘脖子没有天鹅的长‘, ‘sex‘: ‘雄性‘}
2.2.4特殊的类属性
class Geese:
‘‘‘雁类‘‘‘
def __init__(self):
self.neck = "脖子较长"
print(Geese.__name__) # 类的名字(字符串)
print(Geese.__doc__) # 类的文档字符串
print(Geese.__base__) # 类的第一个父类
print(Geese.__bases__) # 类的所有父类构成的元组
print(Geese.__dict__) # 类的属性
print(Geese.__module__) # 类定义所在的模块
print(Geese.__class__) # 实例对应的类(仅新式类中)
输出:
Geese
雁类
<class ‘object‘>
(<class ‘object‘>,)
{‘module‘: ‘main‘, ‘doc‘: ‘雁类‘,‘init‘: <function Geese.init at 0x0000019E46ABC168>, ‘dict‘: <attribute ‘dict‘ of ‘Geese‘ objects>,‘weakref‘: <attribute ‘weakref‘ of ‘Geese‘ objects>}
main
<class ‘type‘>
以上是关于类的定义和使用的主要内容,如果未能解决你的问题,请参考以下文章