我想创建一个类,该类将具有一种重置其属性的方法,但是我需要将重置之前的数据保存到某个列表中。
我尝试了以下代码:
class Foo:
feature1 = 'hey'
feature2 = 10
def reset(self):
self.feature1 = None
self.feature2 = None
some_list = []
foo = Foo()
print(foo.feature1)
print(some_list)
some_list.append(foo)
foo.reset()
print(foo.feature1)
print(some_list[0].feature1, some_list[0].feature2)
但是它打印出:
hey
[]
None
None None
有没有办法复制它?
答案 0 :(得分:2)
我建议您尝试创建新实例而不是重置。并且还使属性成为实例的一部分,而不是类的一部分。
这样定义您的课程:
save_path = './keras-saves/_lastest.ckpt'
try:
model.fit(x_train, y_train,
batch_size=batch_size,
epochs=epochs)
except KeyboardInterrupt:
model.save(save_path)
print('Output saved to: "{}./*"'.format(save_path))
然后运行以下行:
public static void sendHtmlEmail(String subject, String messages){
try{
String HOST = ...;
final String USER = ...;
final String PASSWORD = ...;
String PORT = "587";
String TO = ...;
String SUBJECT = "Test Mail";
String TEXT = "This is a test message from my java application. Just ignore it";
Properties props = System.getProperties();
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.localhost", HOST);
props.put("mail.smtp.port", PORT);
props.put("mail.smtp.auth",true);
props.put("mail.smtp.starttls.enable", true);
Authenticator auth = new Authenticator()
{
@Override
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(USER, PASSWORD);
}
};
Session session = Session.getInstance(props,auth);
session.setDebug(true);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(USER));
message.addRecipient(RecipientType.TO, new InternetAddress(TO));
message.setSentDate(new Date());
message.setSubject(SUBJECT);
message.setText(TEXT);
message.saveChanges();
Transport transport = session.getTransport("smtp");
transport.connect(HOST, USER, PASSWORD);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
}
catch(Exception e){
e.printStackTrace();
}
}
您将获得以下输出:
class Foo:
def __init__(self):
self.feature1 = 'hey'
self.feature2 = 10
def __repr__(self):
return '[{}|{}]'.format(self.feature1, self.feature2)
答案 1 :(得分:1)
您不应尝试重置实例,因为可能有很多对此实例的引用。相反,如果您需要一个新的对象,请创建一个新对象:
Database D;
D.add(myAgent.getLocalName);
输出:
class Foo:
def __init__(self, feature1=None, feature2=None):
self.feature1 = feature1
self.feature2 = feature2
some_list = []
foo = Foo("hey", 10)
print(foo.feature1)
print(some_list)
some_list.append(foo)
foo = Foo()
print(foo.feature1)
print(some_list[0].feature1, some_list[0].feature2)
答案 2 :(得分:0)
在重置之前制作对象的副本,然后将副本附加到列表中而不是原始对象。
根据您的需求,使用深度复制是一种更好的方法,因为我认为您正在做快照或类似的事情。
答案 3 :(得分:0)
了解类属性和对象属性之间的区别。
feature1和feature2都是类属性。这意味着您可以以Foo.feature1和Foo.feature2的身份访问它们。
使用self.feature1时,是指对象属性。在您的情况下,如果没有将对象属性定义为Feature1,则由于继承,您将获得类属性。
另一方面,如果您使用与类属性相同的名称定义了对象属性,则使用self会给您对象属性,而不是类属性。如果要显式访问对象中的类属性,则应使用className.attribute,以Foo.feature1为例。