说我想在Python中实现一个简单的数据库。我通过创建一个类
来做到这一点class myStruct():
def __init__(self,name,salary,doB,title):
self.name=name
self.salary=salary
self.doB=doB
self.title=title
现在,我想创建该类的对象。但是我希望用户为每个对象输入所有变量本身,并且对象的名称将是用户输入的名称。我看到了一些描述这样的内容的其他堆叠页面,例如此链接如何在Python中动态创建类的实例?但这与从另一个模块导入的类有关,我不了解klass = global()[" class_name"]。我不明白如何链接从用户输入的字符串以使用global()。
再次,这个想法甚至是用户以及该对象的所有其他字段键入类Mystruct的每个对象的名称。我该怎么做?
编辑:我认为有些人不了解我要做的事情。重点不是写
instance=MyStruct(name,salary,doB,title)
在我的代码中,但是要具有一个函数,该函数可创建一个以姓名输入的用户命名的实例。所以这会像
name=input('Enter your name')
'%s' %name=MyStruct(name)
你明白了吗?该名称被替换为
# Collect the data from user
nameVar = input('Type the name: ')
salVar = input('Type the salary: ')
dobVar = input('Type the doB: ')
titleVar = input('Type the title: ')
# Create the instance of the myStruct object
myInstance = myStruct(nameVar, salVar, dobVar, titleVar)
顺便说一句,是不好的命名班而不大写的糟糕风格。您应该始终在大写=> mystruct
你coculd:
只需使用该
myStruct
并在询问参数之后创建一个对象,例如:class myStruct(): def __init__(self, name, salary, doB, title): self.name = name self.salary = salary self.doB = doB self.title = title name = raw_input('Enter name: ') salary = raw_input('Enter salary: ') doB = raw_input('Enter doB: ') title = raw_input('Enter title: ') new_object = myStruct(name, salary, dob, title)
或,您可以对
__init__
进行一些调整以完成所需的工作。它可能不整洁,但会起作用。class myStruct(): def __init__(self,name=None,salary=None,doB=None,title=None): if not name: self.name = raw_input('Enter name: ') else: self.name=name if not salary: self.salary = raw_input('Enter salary: ') else: self.salary=salary if not soB: self.doB = raw_input('Enter doB: ') else: self.doB=doB if not title: self.title = raw_input('Enter title: ') else: self.title=title
我遇到了一个类似的问题...但是在我的情况下,我的输入"名称"来自文件,属性的数量可能会有所不同。以下是我当前的解决方案。我敢肯定,有更好的方法可以做到这一点,我希望其他人可以提供这些方法。
import numpy as np
class Target():
sample = {}
@classmethod
def create(cls, name):
target = Target(name)
cls.sample[name] = target
return target
def __init__(self, name):
self.name = name
names = ('Moon', 'Earth', 'Mars')
# gravity in units of m / s^{-2}
grav = np.array([1.620, 9.807, 3.711])
sample = {}
for idx in np.arange(0, len(names), 1):
name = names[idx]
sample[name] = Target(name)
setattr(sample[name], 'grav', grav[idx])
if (name == names[1]):
# number of moons
setattr(sample[name], 'num_moons', 1)
elif (name == names[2]):
# number of moons
setattr(sample[name], 'num_moons', 2)
for idx in np.arange(0, len(names), 1):
name = names[idx]
print(sample[names[idx]].name + ':')
print(' Gravity = %.3f (m s^{-2})'%sample[names[idx]].grav)
if (idx == 1):
print(' Number of moons = %i'%(sample[names[idx]].num_moons))
P.S。您可以想象我的输入文件有三行,每行的长度不同(但不难转换为numpy数组)。月亮1.620地球9.807 1火星3.711 2
尝试通过使用两种方式将其传递给 init 将其传递到 inter inture:input(input(input()或raw_input()。 名为output_all的fucntion用于打印保存的数据。class myStruct():
def __init__(self,name,salary,doB,title):
self.name=name
self.salary=salary
self.doB=doB
self.title=title
def output_all(self):
print( '{} n{} n{} n{}'.format(self.name,self.salary, self.doB,
self.title))
user = myStruct(
name = input('type your name: '),
salary = input('type your salary : '),
doB = input('type your doB: '),
title = input('type you title : ')
)
myStruct.output_all(user)