Python魔法函数

Python的魔法函数

class Company(object):
    def __init__(self, employee_list):
        self.employee = employee_list


company = Company(["tom", "bob", "jane"])
employee = company.employee
for em in employee:
    print(em)

上述代码等于下面:

class Company(object):
    def __init__(self, employee_list):
        self.employee = employee_list

    def __getitem__(self, item):
        return self.employee[item]


company = Company(["tom", "bob", "jane"])
for em in company:
    print(em)
  • python中以双下划线开始和结束的函数(不可自己定义)为魔法函数
  • 调用类实例化的对象的方法时自动调用魔法函数
  • 不加__getitem__ ,Company是不可迭代类型
  • 加了__getitem__ ,Company变为可迭代类型

两个小例子:

例1

class Company(object):
    def __init__(self, employee_list):
        self.employee = employee_list

    def __getitem__(self, item):
        return self.employee[item]


company = Company(["tom", "bob", "jane"])
print(len(company))

上面报错

正确应该是:

class Company(object):
    def __init__(self, employee_list):
        self.employee = employee_list


    def __len__(self):
        return len(self.employee)


company = Company(["tom", "bob", "jane"])
print(len(company))

例2:

class MyVector(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other_instance):
        re_vector = MyVector(self.x+other_instance.x, self.y+other_instance.y)
        return re_vector

    def __str__(self):
        return"x:{x}, y:{y}".format(x=self.x, y=self.y)


first_vec = MyVector(1,2)
second_vec = MyVector(2,3)
print(first_vec+second_vec)

猜你喜欢

转载自blog.csdn.net/zhaohaibo_/article/details/80644409