我是'类'方法的新手,如果有人感到不满,请原谅。这个例子很多人都知道。
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()))
结果:
但我不这样做,我需要写这个。
Rectangle(160, 120, 2000)
然后马上得到答案
我可以使用普通的def myfunction:,但我想通过类来实现,谢谢大家的帮助。
使用 __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
如果你实现了你在 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()
调用,而且它更灵活,因为你仍然可以选择是否要显示输出。