面试题系列(四)-- python魔法方法都有哪些?

点击“简说Python”,选择“星标公众号”

福利干货,第一时间送达!

面试题系列(四)-- python魔法方法都有哪些?_第1张图片

@图片自制by unsplash

本文授权转载自Python爬虫人工智能大数据

禁二次转载

作者:吴成

阅读文本大概需要 10 分钟。

大家好,这是本系列 Python面试系列的第四篇。按照惯例,如果你还没看过本系列前三篇,可以点击下面的传送门直接访达

面试题系列(一)-- python内建函数都有哪些?

面试题系列(二)-- python内建函数都有哪些?

问题:python魔法方法有哪些?

1、__dict__方法

class A(object):
 
    a = 0
    b = 1
 
     def __init__(self):
        self.a = 5
        self.b = 6

     def test(self):
        print("普通方法")

    @staticmethod
     def static_test(self):
        print("静态方法")

    @classmethod
     def class_test(self):
        print("类方法")

obj = A()
print(A.__dict__)
print(obj.__dict__)

写了一个类和对象,分别打印类和对象的__dict__,看出现什么?

# 类调用__dict__
{'__module__': '__main__', 'a': 0, 'b': 1,
'__init__': ,
 'test': ,
'static_test': ,
'class_test': ,
'__dict__': ,
'__weakref__': ,
'__doc__': None}

# 对象调用__dict__
{'a': 5, 'b': 6}

 类属性、类的普通方法、静态方法、类方法以及一些内置的属性都是放在类__dict__里的
  
对象的__dict__中存储了一些self.xxx的一些属性

2、__str__方法

使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印__str__方法中return的数据

class Student(object):
 
     #初始化对象
     def __init__(self, new_name, new_age):
         self.name = new_name
         self.age = new_age

     def __str__(self):
         return "%s的年龄是:%d"%(self.name, self.age)

a = Student("张三",30)
print(a)

打印结果:

张三的年龄是:30

3、__getattr__、__setattr__方法

可以获取或者设置属性

class Student(object):
 
     #初始化对象
     def __init__(self, name, age):
         self.name = name
         self.age = age

     def __getattr__(self):
         return self.name

     def __setattr__(self,name,value):
         self.__dict__["name"] = "add_{}".format(value)
 
a = Student("张三",30)
print(a.__dict__)

打印结果:


640?wx_fmt=png
今日留言主题
说说你的国庆计划吧?
或者一句激励自己的话?
(字数不少于15字)

说明:最近每日留言赠书暂停一段时间
不过,留言打卡30天进福利群
还在继续,等你~

2小时快速掌握Python基础知识要点

完整Python基础知识要点

640?wx_fmt=jpeg
学Python | 聊赚钱

你可能感兴趣的:(面试题系列(四)-- python魔法方法都有哪些?)