每次调用对象时更新实例变量
Instance variable updating every time object is called
我正在尝试创建一个 class,它使用随机生成的字符串作为每个实例的 ID,稍后将在另一个 class 中继承。下面是我正在做的事情的简化版本。
class Part():
def __init__(self, type):
import random
import string
self.type = type
# Generate instance ID
self.part_serial = ''.join(random.choice(string.ascii_lowercase + string.digits) for i in range (8))
class Assembly():
def __init__(self, Part):
import random
import string
# Input agruments
Part.__init__(self)
# Use inherited part_serial
self.assembly_serial = Part.part_serial + "-" + ''.join(random.choice(string.ascii_lowercase + string.digits) for i in range (8))
问题是一旦我创建了部件,每次我调用对象时,id 都会改变。有什么方法可以使用类似的东西创建实例变量,每次调用对象时都不会改变?
test_part = Part("A")
print(test_part.part_serial) # Returns 5347c17a
test_assembly = Assembly(test_part) # Returns fda8721d-47b6c677 but should return 5347c17a-xxxxxx
错误就在Assembly
初始化:
def __init__(self, Part):
# Input agruments
Part.__init__(self)
您出于某种奇怪的原因明确地重新初始化了 Part
。这会生成一个新的零件编号。你为什么要那样做? __init__
只应在任何对象的初始创建时调用一次,并且 永远不会 再次调用。从 Assembly
中删除它。此外,请继续研究 class 个示例以了解结构和流程。
N.B。 import
语句位于文件的顶部。每次创建新对象时,您的代码都会重复 import
s ,这几乎总是在浪费时间。
我正在尝试创建一个 class,它使用随机生成的字符串作为每个实例的 ID,稍后将在另一个 class 中继承。下面是我正在做的事情的简化版本。
class Part():
def __init__(self, type):
import random
import string
self.type = type
# Generate instance ID
self.part_serial = ''.join(random.choice(string.ascii_lowercase + string.digits) for i in range (8))
class Assembly():
def __init__(self, Part):
import random
import string
# Input agruments
Part.__init__(self)
# Use inherited part_serial
self.assembly_serial = Part.part_serial + "-" + ''.join(random.choice(string.ascii_lowercase + string.digits) for i in range (8))
问题是一旦我创建了部件,每次我调用对象时,id 都会改变。有什么方法可以使用类似的东西创建实例变量,每次调用对象时都不会改变?
test_part = Part("A")
print(test_part.part_serial) # Returns 5347c17a
test_assembly = Assembly(test_part) # Returns fda8721d-47b6c677 but should return 5347c17a-xxxxxx
错误就在Assembly
初始化:
def __init__(self, Part):
# Input agruments
Part.__init__(self)
您出于某种奇怪的原因明确地重新初始化了 Part
。这会生成一个新的零件编号。你为什么要那样做? __init__
只应在任何对象的初始创建时调用一次,并且 永远不会 再次调用。从 Assembly
中删除它。此外,请继续研究 class 个示例以了解结构和流程。
N.B。 import
语句位于文件的顶部。每次创建新对象时,您的代码都会重复 import
s ,这几乎总是在浪费时间。