Python类的特殊方法

# 特殊方法,也称为魔术方法
# 特殊方法都是使用__开头和结尾的
# 特殊方法一般不需要我们手动调用,需要在一些特殊情况下自动执行

# 定义一个Person类
class Person(object):
    """人类"""
    def __init__(self, name , age):
        self.name = name
        self.age = age

    # __str__()这个特殊方法会在尝试将对象转换为字符串的时候调用
    # 它的作用可以用来指定对象转换为字符串的结果  (print函数)  
    def __str__(self):
        return 'Person [name=%s , age=%d]'%(self.name,self.age)       

    # __repr__()这个特殊方法会在对当前对象使用repr()函数时调用
    # 它的作用是指定对象在 ‘交互模式’中直接输出的效果    
    def __repr__(self):
        return 'Hello' 
 
    '''对象的 __dir__ 方法用于列出该对象内部的所有属性(包括方法)名,该方法将会
    返回包含所有属性(方法)名的序列。当程序对某个对象执行 dir(object) 函数时,
    实际上就是将该对象的 __dir__() 方法返回值进行排序,然后包装成列表。'''
    # __dir__():         
    

    '''__dict__ 属性用于查看对象内部存储的所有属性名和属性值组成的字典,通常程序直接使用
    该属性即可。程序使用 __dict__ 属性既可查看对象的所有内部状态,也可通过字典语法来访问或修改
    指定属性的值。'''
    # __dict__():

    # object.__add__(self, other)
    # object.__sub__(self, other)
    # object.__mul__(self, other)
    # object.__matmul__(self, other)
    # object.__truediv__(self, other)
    # object.__floordiv__(self, other)
    # object.__mod__(self, other)
    # object.__divmod__(self, other)
    # object.__pow__(self, other[, modulo])
    # object.__lshift__(self, other)
    # object.__rshift__(self, other)
    # object.__and__(self, other)
    # object.__xor__(self, other)
    # object.__or__(self, other)

    # object.__lt__(self, other) 小于 <
    # object.__le__(self, other) 小于等于 <=
    # object.__eq__(self, other) 等于 ==
    # object.__ne__(self, other) 不等于 !=
    # object.__gt__(self, other) 大于 >
    # object.__ge__(self, other) 大于等于 >= 
    
    # __len__()获取对象的长度

    # object.__bool__(self)
    # 可以通过bool来指定对象转换为布尔值的情况
    def __bool__(self):
        return self.age > 17

    # __gt__会在对象做大于比较的时候调用,该方法的返回值将会作为比较的结果
    # 他需要两个参数,一个self表示当前对象,other表示和当前对象比较的对象
    # self > other
    def __gt__(self , other):
        return self.age > other.age


# 创建两个Person类的实例        
p1 = Person('孙悟空',16)
p2 = Person('猪八戒',28)

# 打印p1
# 当我们打印一个对象时,实际上打印的是对象的中特殊方法 __str__()的返回值
# print(p1) # <__main__.Person object at 0x04E95090>
print(p1)
print(p2)

print(repr(p1))

# t = 1,2,3
# print(t) # (1, 2, 3)

print(p1 > p2)
print(p2 > p1)

print(bool(p1))

# if p1 :
#     print(p1.name,'已经成年了')
# else :
#     print(p1.name,'还未成年了')

print(p1.__dir__())
# print(dir(p1))
# print(p1.__dict__)
# p1.__dict__["name"]="wzy"
# print(p1.__dict__["name"])

 

posted @ 2019-08-26 17:51  橘子先生123  阅读(484)  评论(0编辑  收藏  举报