面向对象编程(4)双下划线方法
1,__init__
初始化方法,在对象产生后才会执行,不能有返回值
2,__new__方法
类名() 创建对象时,在自动执行 __init()__方法前,会先执行 object.__new__方法,在内存中开辟对象空间并返回
class Person(object):
def __new__(cls, *args, **kwargs):
print("__new__方法执行")
# return object.__new__(cls)
def __init__(self, name, age):
print("__init__方法执行")
self.name = name
self.age = age
yuan = Person("yuan", 23)
3,__call__
对象加括号,会自动执行call方法
class Foo(object):
def __call__(self, *args, **kwargs):
print("执行call方法")
obj = Foo()
obj()
4,__str__方法
改变对象的字符串显示。可以理解为使用print函数打印一个对象时,会自动调用对象的__str__方法
# __str__ 的返回结果可读性强。也就是说,__str__ 的意义是得到便于人们阅读的信息
class Person(object):
def __init__(self, name, age):
print("__init__方法执行")
self.name = name
self.age = age
def __str__(self):
return self.name
yuan = Person("yuan", 23)
print(yuan)
5,__dict__方法
会返回一个字典
class Foo():
def __init__(self, name, age):
self.name = name
self.age = age
obj = Foo("alex", 18)
print(obj.__dict__)
6,__repr__方法
在python解释器环境下,会默认显示对象的repr表示。
# __repr__ 存在的目的在于调试,便于开发者使用
# 案例1:
class A():
... def __str__(self):
... return "str"
...
... def __repr__(self):
... return "repr"
... a = A()
a
repr
print(a)
str
# 案例2:
import datetime
date = datetime.datetime.now()
print(str(date)) # '2021-05-21 12:04:02.671735'
print(repr(date)) # 'datetime.datetime(2021, 5, 21, 12, 4, 2, 671735)'
# 案例3:
import json
dic = {"name":"yuan","age":23}
data = json.dumps(dic)
print(str(data))
print(repr(data))
7,__del__方法
当对象在内存中被释放时,自动触发执行。
在进行垃圾回收时自动触发执行的。
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __del__(self):
print("%s删除了" % self.name)
yuan = Person("yuan", 23)
# del yuan
8,__eq__ 方法
拥有__eq__方法的对象支持相等的比较操作
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, obj):
return self.name == obj.name
yuan = Person("yuan", 23)
alvin = Person("alvin", 23)
print(yuan == alvin)
9,__len__方法
class G(object):
def __len__(self):
return 100
g=G()
print(len(g))
10,__add__方法
对象+值,内部会执行对象的add方法,并将+后面的值当成参数传递进去
class Foo(object):
def __init__(self, name):
self.name = name
def __add__(self, other):
return "{}-{}".format(self.name, other.name)
v1 = Foo("alex")
v2 = Foo("yuan")
v3 = v1 + v2
print(v3) # alex-yuan
加 __add__
乘 __mul__
·······
浙公网安备 33010602011771号