问题: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爬虫人工智能大数据