类中的直接打印 - python

问题描述 投票:0回答:1

我是'类'方法的新手,如果有人感到不满,请原谅。这个例子很多人都知道。

class Rectangle:
    def __init__(self, length, breadth, unit_cost=0):
        self.length = length
        self.breadth = breadth
        self.unit_cost = unit_cost

    def get_perimeter(self):
        return 2 * (self.length + self.breadth)

    def get_area(self):
        return self.length * self.breadth

    def calculate_cost(self):
        area = self.get_area()
        return area * self.unit_cost

现在为了获取信息 我们需要做这样的操作:

r = Rectangle(160, 120, 2000)
print("Area of Rectangle: %s cm^2" % (r.get_area()))
print("Cost of rectangular field: Rs. %s " %(r.calculate_cost()))

结果:

  • 长方形的面积: 19200 cm^2。
  • 矩形场的成本。38400000卢比

但我不这样做,我需要写这个。

Rectangle(160, 120, 2000)

然后马上得到答案

  • 长方形的面积: 19200 cm^2。
  • 矩形场的成本。38400000卢比

我可以使用普通的def myfunction:,但我想通过类来实现,谢谢大家的帮助。

python
1个回答
1
投票

使用 __repr__ 为你的类做一个可打印的表示,然后在你的类中添加一个打印语句。__init__ 如果你想避免在类外使用print(你可以将其设为可选的)。

class Rectangle:
    def __init__(self, length, breadth, unit_cost=0):
        self.length = length
        self.breadth = breadth
        self.unit_cost = unit_cost
        print(self)

    def __repr__(self):
        area_str = "Area of Rectangle: %s cm^2" % (self.get_area())
        cost_str = "Cost of rectangular field: Rs. %s " %(self.calculate_cost())
        return area_str + "\n" + cost_str

    def get_perimeter(self):
        return 2 * (self.length + self.breadth)

    def get_area(self):
        return self.length * self.breadth

    def calculate_cost(self):
        area = self.get_area()
        return area * self.unit_cost

输出。

r = Rectangle(160, 120, 2000)

Area of Rectangle: 19200 cm^2
Cost of rectangular field: Rs. 38400000 

4
投票

如果你实现了你在 print 语句作为类 __str__ 方法,你会通过打印类本身得到这个结果。

class Rectangle:
    def __init__(self, length, breadth, unit_cost=0):
        self.length = length
        self.breadth = breadth
        self.unit_cost = unit_cost

    def __str__(self):
        return "Area of Rectangle: %s cm^2\nCost of rectangular field: Rs. %s " % (self.get_area(), self.calculate_cost())

    def get_perimeter(self):
        return 2 * (self.length + self.breadth)

    def get_area(self):
        return self.length * self.breadth

    def calculate_cost(self):
        area = self.get_area()
        return area * self.unit_cost

和输出。

>>> print(Rectangle(160, 120, 2000))                                                                                                                        
Area of Rectangle: 19200 cm^2
Cost of rectangular field: Rs. 38400000

这是个更好的设计决定,比起添加一个 print 声明 __init__由于添加一个 "小 "字,相对来说不费吹灰之力。print 绕口令 Rectangle() 调用,而且它更灵活,因为你仍然可以选择是否要显示输出。

© www.soinside.com 2019 - 2024. All rights reserved.