类的定义和使用

一、类相关知识

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'>

posted @ 2020-05-24 12:39  71丶  阅读(735)  评论(0编辑  收藏  举报