假设我想要一个名为Num的类,它包含一个数字,一半和它的正方形.
我应该能够修改三个变量中的任何一个,它将影响它的所有相关成员变量.我应该能够使用三个值中的任何一个来实例化该类.
设计这个类的最佳方法是什么,以便可以轻松修改并确保我不会留下什么东西?
我应该存储所有三个号码还是只存储主号码?
例如,这就是我将如何在python中使用我的类:
num = Num(5)
print num.n, num.half, num.square
Run Code Online (Sandbox Code Playgroud)
它应该打印5,2.5和25
这很简单,但我也想用它的一半初始化.
num = Num(half=2.5)
print num.n, num.half, num.square
Run Code Online (Sandbox Code Playgroud)
它还应该打印5,2.5和25
如何让init函数知道它是一半?
我也想修改任何数字,它将改变所有相关的数字!例如:
num.square = 100
print num.n, num.half, num.square
Run Code Online (Sandbox Code Playgroud)
它应该打印10,5和100
任何有关如何设计课程的建议都将受到赞赏.
与 @Daniel 相同的解决方案 -扩展、无 lambda、Python 3.3:
class Num:
#class Num(object): for Python 2.
def __init__(self, n = None, half = None, square = None):
if n is not None:
self.n = n
elif half is not None:
self.half = half
elif square is not None:
self.square = square
else:
self.n = 0
@property
def n(self):
return self.__n
@n.setter
def n(self, n):
self.__n = n
@property
def half(self):
return self.n / 2.0
@half.setter
def half(self, n):
self.n = n * 2
@property
def square(self):
return self.n ** 2
@square.setter
def square(self, n):
self.n = n ** .5
>>> five = Num(n=5)
>>> five.half, five.n, five.square, five._Num__n
(2.5, 5, 25, 5)
>>>
Run Code Online (Sandbox Code Playgroud)