- 四、类的方法
- 1、类专有的方法
- 2、方法的访问控制
- 3、方法的装饰器
四、类的方法
1、类专有的方法
一个类创建的时候,就会包含一些方法,主要有以下方法:
类的专有方法:
| 方法 | 说明 |
|---|---|
__init__ |
构造函数,在生成对象时调用 |
__del__ |
析构函数,释放对象时使用 |
__repr__ |
打印,转换 |
__setitem__ |
按照索引赋值 |
__getitem__ |
按照索引获取值 |
__len__ |
获得长度 |
__cmp__ |
比较运算 |
__call__ |
函数调用 |
__add__ |
加运算 |
__sub__ |
减运算 |
__mul__ |
乘运算 |
__div__ |
除运算 |
__mod__ |
求余运算 |
__pow__ |
乘方 |
当然有些时候我们需要获取类的相关信息,我们可以使用如下的方法:
type(obj):来获取对象的相应类型;isinstance(obj, type):判断对象是否为指定的 type 类型的实例;hasattr(obj, attr):判断对象是否具有指定属性/方法;getattr(obj, attr[, default])获取属性/方法的值, 要是没有对应的属性则返回 default 值(前提是设置了 default),否则会抛出 AttributeError 异常;setattr(obj, attr, value):设定该属性/方法的值,类似于 obj.attr=value;dir(obj):可以获取相应对象的所有属性和方法名的列表:
2、方法的访问控制
其实我们也可以把方法看成是类的属性的,那么方法的访问控制也是跟属性是一样的,也是没有实质上的私有方法。一切都是靠程序员自觉遵守 Python 的编程规范。
示例如下,具体规则也是跟属性一样的,
#!/usr/bin/env python# -*- coding: UTF-8 -*-class User(object):def upgrade(self):passdef _buy_equipment(self):passdef __pk(self):pass
3、方法的装饰器
@classmethod
调用的时候直接使用类名类调用,而不是某个对象@property
可以像访问属性一样调用方法
具体的使用看下实例:
#!/usr/bin/env python# -*- coding: UTF-8 -*-class UserInfo(object):lv = 5def __init__(self, name, age, account):self.name = nameself._age = ageself.__account = accountdef get_account(self):return self.__account@classmethoddef get_name(cls):return cls.lv@propertydef get_age(self):return self._ageif __name__ == '__main__':userInfo = UserInfo('两点水', 23, 347073565);# 打印所有属性print(dir(userInfo))# 打印构造函数中的属性print(userInfo.__dict__)# 直接使用类名类调用,而不是某个对象print(UserInfo.lv)# 像访问属性一样调用方法(注意看get_age是没有括号的)print(userInfo.get_age)
运行的结果:

