【发布时间】:2020-12-31 02:57:10
【问题描述】:
总的来说,我对 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
【问题讨论】:
-
它没有给你“内存地址”,这是任何对象的默认字符串表示。为什么您期望它会打印其他内容?
-
顺便说一句,
self.__x = x不是私人的。 Python 没有私有变量。要表示变量不是公共 API 的一部分,请使用 单下划线。双下划线用于名称修饰,与私有不同 -
我的问题是如何获取以对象为参数的方法。我能感觉到我犯的主要错误是在方法和打印从方法获得的值。
-
这正是它已经在做的事情。该方法将对象作为参数并将其分配给
self.__y。为什么你认为这行不通?问题在于您要打印的内容。 -
所以我的打印声明需要更改?如何打印分配的值而不是像
<__main__.A object at 0x016DC3D0>这样的东西?
标签: python oop methods constructor