• 四、类的方法
    • 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 的编程规范。

    示例如下,具体规则也是跟属性一样的,

    1. #!/usr/bin/env python
    2. # -*- coding: UTF-8 -*-
    3. class User(object):
    4. def upgrade(self):
    5. pass
    6. def _buy_equipment(self):
    7. pass
    8. def __pk(self):
    9. pass

    3、方法的装饰器

    • @classmethod
      调用的时候直接使用类名类调用,而不是某个对象

    • @property
      可以像访问属性一样调用方法

    具体的使用看下实例:

    1. #!/usr/bin/env python
    2. # -*- coding: UTF-8 -*-
    3. class UserInfo(object):
    4. lv = 5
    5. def __init__(self, name, age, account):
    6. self.name = name
    7. self._age = age
    8. self.__account = account
    9. def get_account(self):
    10. return self.__account
    11. @classmethod
    12. def get_name(cls):
    13. return cls.lv
    14. @property
    15. def get_age(self):
    16. return self._age
    17. if __name__ == '__main__':
    18. userInfo = UserInfo('两点水', 23, 347073565);
    19. # 打印所有属性
    20. print(dir(userInfo))
    21. # 打印构造函数中的属性
    22. print(userInfo.__dict__)
    23. # 直接使用类名类调用,而不是某个对象
    24. print(UserInfo.lv)
    25. # 像访问属性一样调用方法(注意看get_age是没有括号的)
    26. print(userInfo.get_age)

    运行的结果:

    Python 方法的装饰器