一般来说,我对Python和OOP还是很陌生。我发现了一个问题,要求我使2个类使用从一个类创建的对象作为另一个类的参数。问题指出,我必须在不更改给定代码的情况下制作类,构造函数和方法以获得示例输出。我的代码:
class B:
def __init__(self,x):
self.__x=x #private variable
def method(self,y):
self.__y=y #private variable
def details(self):
print(f'x = {self.__x}') #private variable
print(self.__y)
class A:
def __init__(self,z):
self.z=z
#==================================
#This can't be changed.
obj1=A('a')
obj2=A('b')
obj3=B('x')
obj3.method(obj1)
obj3.method(obj2)
obj3.details()
但这给了我对象obj1和obj2的内存地址,而不是值a和b。我还尝试采用一个空字符串,然后将a和b隐含到它,但是对象类型不能用str隐隐。所以,我现在基本上卡住了。任何帮助将不胜感激。谢谢。
示例输出为:
x = x
a
b
代替print(self.__y)
您需要做的print(self.__y.z)
就是获取对象存储在其中的值z
。
但是要获得该示例输出,您必须跟踪传递给该obj3.method
方法的所有对象,而不仅仅是最后一个对象。我的意思是self.__y
需要列出一个清单。
class B:
def __init__(self,x):
self.__x=x #private variable
self.__y=[]
def method(self,y):
self.__y.append(y) #private variable
def details(self):
print(f'x = {self.__x}') #private variable
for obj in self.__y:
print(obj.z)
class A:
def __init__(self,z):
self.z=z
#==================================
#This can't be changed.
obj1=A('a')
obj2=A('b')
obj3=B('x')
obj3.method(obj1)
obj3.method(obj2)
obj3.details()
由于这些对象实际上不代表任何东西,因此很难命名,而且我认为这使整个问题更难以理解,但是下面是我如何命名您可以控制的变量。正如评论中已经提到的那样,Python中实际上并没有私有变量的概念,但是如果您要警告人们变量应该被视为私有变量,则通常在变量前加一个下划线。
class B:
def __init__(self, prop):
self.prop = prop
self.obj_A_list = []
def method(self, obj_a):
self.obj_A_list.append(obj_a)
def details(self):
print(f'x = {self.prop}')
for obj in self.obj_A_list:
print(obj.prop)
class A:
def __init__(self, prop):
self.prop = prop
#==================================
#This can't be changed.
obj1=A('a')
obj2=A('b')
obj3=B('x')
obj3.method(obj1)
obj3.method(obj2)
obj3.details()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句