如何替换python类中的变量?
我被要求定义一个包含3个变量的类:(看起来像这样) 但是,我还必须在上面的类中编写另一个函数:如何替换python类中的变量?,python,class,replace,instance,Python,Class,Replace,Instance,我被要求定义一个包含3个变量的类:(看起来像这样) 但是,我还必须在上面的类中编写另一个函数: def read(#takes whatever parameter I need) #functions which I dont know how to write 这个函数应该允许我读取另一个文件(我们称之为file.txt),并用该文件中的信息替换self.a、self.b和self.c,如果您知道我的意思的话?例如: itemA=random(1,2,3) 和
def read(#takes whatever parameter I need)
#functions which I dont know how to write
这个函数应该允许我读取另一个文件(我们称之为file.txt),并用该文件中的信息替换self.a、self.b和self.c,如果您知道我的意思的话?例如:
itemA=random(1,2,3)
和file.txt包含三行:
6
7
8
运行以下命令:
itemA.read()
假设将参数中的1,2,3替换为6,7,8,以便
itemA=random(6,7,8)
我怎样才能做到这一点?我已经写了读和复制random(6,7,8)的部分,其中包括:
但是,如果不手动写入,我无法将itemA从random(1,2,3)更新为random(6,7,8):
itemA=itemA.read() #in python shell
顺便说一句,itemA只是一个示例名称,它可以被命名为任何名称,因此我不能在计算中实际使用itemA…在类的方法中,您可以通过将属性设置为
self
,就像您在\uu init\uu
方法中所做的那样来操作属性
然后,您需要做的就是在读取后设置这些属性。您可能希望您的read()
方法也采用文件名:
def read(self, filename):
with open(filename) as fh:
self.a = int(fh.readline())
self.b = int(fh.readline())
self.c = int(fh.readline())
self.result = # same calculation
因此,当您调用itemA.read()
时,它将在适当的位置更改属性;这里不需要返回任何内容
您可以重用\uuuu init\uuuu
方法来设置这些属性,并避免重复self的计算。result
属性:
class random(object):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
self.result = #calculations with a,b and c.
def read(self, filename):
with open(filename) as fh:
a = int(fh.readline())
b = int(fh.readline())
c = int(fh.readline())
self.__init__(a, b, c) # set the attributes plus result
或者您可以在\uuu init\uuu
和read()
之间共享一个单独的方法:
它的工作原理如下:
itemA = random(1, 2, 3)
itemA.read('file.txt')
# now itemA.a is set to 4, itemA.b is set to 5 and item.c is set to 6
itemA = random(1, 2, 3)
itemB = random.from_file('file.txt')
您可能希望通过直接提供a
、b
和c
,或者通过读取文件来生成类random
的实例。这稍微高级一点,但这意味着您提供了两种不同的工厂方法,两种不同的方法来生成random。我倾向于使用类方法来实现额外的工厂方法:
class random(object):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
self.result = #calculations with a,b and c.
@classmethod
def from_file(self, filename):
with open(filename) as fh:
a = int(fh.readline())
b = int(fh.readline())
c = int(fh.readline())
return cls(a, b, c) # create a new instance of this class
我将read
方法重命名为from_file()
,以更好地说明这是一个工厂方法。您可以这样使用它:
itemA = random(1, 2, 3)
itemA.read('file.txt')
# now itemA.a is set to 4, itemA.b is set to 5 and item.c is set to 6
itemA = random(1, 2, 3)
itemB = random.from_file('file.txt')
这将创建两个单独的实例,一个直接提供值,另一个读取文件。您应该提到,random
对于自己的类来说是个坏名字。@Matthias:random
不是内置的。当然,它可能会与标准库模块冲突,但只有当您将其作为全局模块导入时才会发生冲突。它是我在这儿。
itemA = random(1, 2, 3)
itemB = random.from_file('file.txt')