首先我们来了解一下什么是Python中的魔法方法。在Python中,魔法方法是以双下划线__作为前缀和后缀的特殊方法。这些方法提供了类的构造、初始化、比较、算术运算等操作的特殊行为。其中就包括本次要讲解的属性转换和类的表示。
一、属性转换
在Python中,我们经常需要对一个对象进行类型转换,比如将字符串类型转换为整数类型、将列表转换为元组类型等。而Python中的魔法方法__XXX__提供了这种类型转换的自定义行为。对于属性转换,我们可以通过__str__和__repr__两个魔法方法来实现。
- __str__方法
__str__方法返回一个用于表示对象的字符串,可以使用print()方法来输出对象的字符串表示。比如一个实例化的类的输出形式就可以使用__str__方法来定义。
这里给出一个示例代码:
class MyClass:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"My name is {self.name} and I'm {self.age} years old."
my_instance = MyClass("Tom", 25)
print(my_instance)
运行结果:
My name is Tom and I'm 25 years old.
- __repr__方法
__repr__方法返回一个用于表示对象的字符串,它通常可以用于将一个对象转换成一个可以被Python解析器读取的字符串形式。比如在对一个对象进行调试的时候,就可以使用__repr__方法来显示对象的字符串形式。
这里给出一个示例代码:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f"Point({self.x}, {self.y})"
p = Point(1, 2)
print(repr(p))
q = eval(repr(p))
print(q.x, q.y)
运行结果:
Point(1, 2)
1 2
二、类的表示
在Python中,我们可以使用__str__和__repr__方法来定制一个对象在字符串中的表示形式。但是,如果要在类级别上对类进行表示,并定义类级别的“打印”形式,则需要使用__str__和__repr__方法的基础上,还需要使用__format__魔法方法。
- __str__方法
__str__方法的作用在前面我们已经讲过了,这里再提一句,它用于将一个对象表示成字符串形式。对于一个类,我们可以使用它来定义类的字符串形式。示例如下:
class MyClass:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"My name is {self.name} and I'm {self.age} years old."
def __repr__(self):
return f"MyClass(name={self.name}, age={self.age})"
def __format__(self, format_spec):
return f"My name is {self.name:{format_spec}} and I'm {self.age:{format_spec}} years old."
my_instance = MyClass("Tom", 25)
print(my_instance)
print(f"{my_instance:20}")
print(f"{my_instance.name:10}")
运行结果:
My name is Tom and I'm 25 years old.
My name is Tom and I'm 25 years old.
Tom
- __repr__方法
__repr__方法也是前面提到过的,它用于将一个对象表示成字符串形式,通常会尽可能的提供足够的信息,以便重建该对象。对于一个类,我们可以使用它来定义类的字符串形式。示例如下:
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __str__(self):
return f"({self.x}, {self.y})"
def __repr__(self):
return f"Point({self.x}, {self.y})"
def __format__(self, format_spec):
return f"({self.x:{format_spec}}, {self.y:{format_spec}})"
p = Point(1, 2)
print(p)
print(repr(p))
print(format(p, ".1f"))
运行结果:
(1, 2)
Point(1, 2)
(1.0, 2.0)
以上就是Python魔法方法-属性转换和类的表示的详细攻略,希望可以帮助到您。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python魔法方法-属性转换和类的表示详解 - Python技术站