类结构中的变量初始化
问题描述:
我想在init中初始化一个函数/方法。 因此,类A中的self.y返回正确的值10.或者可能在A中使用方法get_y?类结构中的变量初始化
请参考下面的代码和注释。如图所示感谢
class A(object):
def __init__(self):
self.x = 5
self.y = None
# self.y = B.eval(self)?? # wants y to be a value obtained from B.eval()
def get_x(self):
return self.x
def get_y(self):
# wants y to be a value obtained from B.eval()
#return B.eval(self) ??
class B(object):
def eval(ClassA):
"""
:param ClassA: is an instance of A
:return: value
"""
return ClassA.get_x() + 5
a = A()
b = B()
print(a.get_y()) # wants value 10 printed out here
print(B.eval(a))
答
只是要B.eval()
一个classmethod
使用它作为class B
的方法装饰:
class A(object):
def __init__(self):
self.x = 5
self.y = None
self.y = B.eval(self)
def get_x(self):
return self.x
def get_y(self):
return B.eval(self)
class B(object):
@staticmethod # ADD THIS LINE
def eval(ClassA):
"""
:param ClassA: is an instance of A
:return: value
"""
return ClassA.get_x() + 5
a = A()
b = B()
print(a.get_y()) # -> 10
print(B.eval(a)) # -> 10
+0
感谢您的答案。 –
+0
不客气。这是必需的,因为'eval()'没有'self'参数,而且您在不创建实例的情况下调用它:'B.eval(a)'。请注意,将它定义在'class B'中并不是简单地将它定义为独立函数(名称不同于'eval'以避免禁用具有相同名称的内置函数)。 – martineau
目前还不清楚你在问什么。你想知道什么? – UnholySheep
您可能希望调查“property”的使用 - 属性是一个在您设置,获取或删除时自动运行用户定义代码的属性:https://docs.python.org/2/library/functions。 html#property – jez
你能否给出一个你想要实现的抽象例子? “B”有什么意义? – jonrsharpe