面试题系列(四)-- 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__': <function A.__init__ at 0x0000010FE7035840>,
 'test': <function A.test at 0x0000010FE7035048>,
'static_test': <staticmethod object at 0x0000010FE7068668>,
'class_test': <classmethod object at 0x0000010FE70686D8>,
'__dict__': <attribute '__dict__' of 'A' objects>,
'__weakref__': <attribute '__weakref__' of 'A' objects>,
'__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__)

打印结果:

{'name': 'add_30'}

python爬虫人工智能大数据

640?wx_fmt=gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值