这是我的代码:
class math():
def __init__(self, x, y):
self.x = x
self.y = y
class pythagorus(math):
def __init__(self, x, y):
math.__init__(self, x, y)
def __str__(self):
import math
return math.sqrt(x**2+y**2)
q = pythagorus(4, 5)
print(q)
如何从类中创建函数,如果有意义,我想返回math.sqrt(x * 2 + y * 2)的结果,但我可以似乎让它工作?提前谢谢!
答案 0 :(得分:1)
您需要参考self
来访问班级中的属性:
class pythagoras(math):
def __str__(self):
import math
return str(math.sqrt(self.x**2 + self.y**2))
__str__
方法必须返回一个字符串值,因此使用__str__
这有点......很奇怪。无需覆盖__init__
方法,您没有在其中执行任何新操作。
您可能希望将基类命名为math
以外的其他内容,这样您就不会屏蔽模块(而不需要在__str__
方法中导入它) 。最佳做法是将CamelCase名称用于类; Math
将是更好的选择。
对于这种操作,我只使用一个函数:
import math
def pythagoras(x, y)
return math.sqrt(x**2 + y**2)
充其量,你在数学课上做pythagoras
个方法:
import math
class Math():
def __init__(self, x, y):
self.x, self.y = x, y
def pythagoras(self):
return math.sqrt(self.x ** 2 + self.y ** 2)
答案 1 :(得分:0)
如果绝对必须这样做,请更正以下内容:
math
既是模块也是类。使用其他名称。math.__init__(self, x, y)
毫无意义。要初始化从父类继承的成员,请使用super()
。在这种情况下,您不必这样做,因为除了父类的构造函数正在做的事情之外,您没有做任何事情。str
必须返回一个字符串。为此目的:
import math
class Point():
def __init__(self, x, y):
self.x = x
self.y = y
class Pythagorus(Point):
def __init__(self, x, y):
# Possibly other things need to be done, but not in this case.
super().__init__(x, y)
def __str__(self):
return str(math.sqrt(self.x ** 2 + self.y ** 2))
我强烈建议使用一个简单的设计,就像一个函数,除非你需要这样做(例如家庭作业)。
答案 2 :(得分:0)
您不需要覆盖子类的__init__
,因为您没有更改实现。
由于您的__str__
方法是通用的,因此它应该是父级的一部分。孩子应该只实现特定的对象功能。
import math as _math
class Math():
""" A generic math class """
def __init__(self, x, y):
self.x = x
self.y = y
self.result = 0
def __str__(self):
return str(self.result)
class Pythagorus(Math):
def calculate(self):
self.result = _math.sqrt(self.x ** 2 + self.y ** 2)
obj = Pythagorus(8,5)
obj.calculate()
print(obj)