Ich versuche derzeit einfache Python-Klasse Beispiel. Ich habe eine Elternklasse (Person) und eine Unterklasse (Kontakt).Neues Objekt wird von vorherigem Objekt überschrieben
Ich instanziiere die Kindklasse zweimal mit verschiedenen Objekten c1 und c2. Das c2 ersetzt das c1. Was mache ich falsch ?
#!/bin/python3
import time
from time import sleep
class Person (object):
id = 0
name = None
fields = {}
def __init__(self):
ctime = time.strftime("%Y-%m-%d %H:%M:%S")
self.fields.update({"create_time":ctime,
"write_time" :ctime})
Person.id+=1
def check_keys (self,vals):
for k in vals:
if not k in self.fields.keys():
raise Exception("Key %s doesnot exists"%k)
def update(self,*args,**kwargs):
vals = kwargs['vals']
self.check_keys(vals)
self.fields.update(vals)
ctime = time.strftime("%Y-%m-%d %H:%M:%S")
self.fields.update({"write_time":ctime})
def write(self,*args,**kwargs):
vals = kwargs['vals']
self.check_keys(vals)
self.fields.update(vals)
def detail (self):
print ("Model Name is ",self.name)
for k,v in self.fields.items():
print("key:",k," value:",v)
print ("#"*50)
def get_id(self):
return self.id
class Contact (Person):
name="contact"
contact_id = 0
fields = {
'id':None,
'name':None,
'age':None,
}
c1 = Contact()
c1.update(vals={'name':'sijan','age':31,'id':c1.get_id()})
sleep(1)
c1.update(vals={'name':'sijan Shs'})
print ("calling contact 2")
c2 = Contact()
c2.update(vals={'name':'Aurelia','age':32,'id':c2.get_id()})
print ("calling contact 1")
c1.detail()
print ("calling contact 1")
c2.detail()
Hier ist das Beispiel für die Ausgabe der letzten 2 c1.detail() und c2.detail()
calling contact 1
Model Name is contact
key: id value: 2
key: name value: Aurelia
key: age value: 32
key: create_time value: 2017-03-19 15:35:54
key: write_time value: 2017-03-19 15:35:54
##################################################
calling contact 2
Model Name is contact
key: id value: 2
key: name value: Aurelia
key: age value: 32
key: create_time value: 2017-03-19 15:35:54
key: write_time value: 2017-03-19 15:35:54
#################################################
Ich glaube es sein sollte:
calling contact 1
Model Name is contact
key: id value: 1
key: name value: Sijan Shs
key: age value: 31
key: create_time value: 2017-03-19 15:35:53
key: write_time value: 2017-03-19 15:35:54
##################################################
calling contact 2
Model Name is contact
key: id value: 2
key: name value: Aurelia
key: age value: 32
key: create_time value: 2017-03-19 15:35:54
key: write_time value: 2017-03-19 15:35:54
#################################################
ich Spinnen bin mein Kopf herum und versucht herauszufinden, was falsch läuft. Wenn ich die Elternklasse verwende, funktioniert sie glatt (das Verhalten wie vorhergesagt, d.h. unterschiedliche Daten). Aber ich habe Schwierigkeiten zu verstehen, warum die Unterklasse sich so verhält? Vermisse ich etwas?
UPDATE
, was ich zu erreichen versuche, ist:
Ich werde einige Klassen und jede Klasse ihre einzigartige Felder haben, das heißt forexample Adresse für Adressnamen. Wie kann ich das erreichen, ohne das Feldwörterbuch zum Eltern hinzuzufügen? Beispiel
class Address(Person):
fields={
'address':None
}
Vielen Dank Jungs, Dies funktioniert,
#!/bin/python3
import time
from time import sleep
class Person (object):
id = 0
name = None
fields = {}
def __init__(self):
ctime = time.strftime("%Y-%m-%d %H:%M:%S")
self.fields.update({"create_time":ctime,
"write_time" :ctime})
Person.id+=1
def check_keys (self,vals):
for k in vals:
if not k in self.fields.keys():
raise Exception("Key %s doesnot exists"%k)
def update(self,*args,**kwargs):
vals = kwargs['vals']
self.check_keys(vals)
self.fields.update(vals)
ctime = time.strftime("%Y-%m-%d %H:%M:%S")
self.fields.update({"write_time":ctime})
def write(self,*args,**kwargs):
vals = kwargs['vals']
self.check_keys(vals)
self.fields.update(vals)
def detail (self):
print ("Model Name is ",self.name)
for k,v in self.fields.items():
print("key:",k," value:",v)
print ("#"*50)
def get_id(self):
return self.id
class Contact (Person):
def __init__(self):
self.name="contact"
self.fields = {
'id':None,
'name':None,
'age':None
}
super(Contact,self).__init__()
ca = Contact()
ca.update(vals={'name':'sijan','age':31,'id':ca.get_id()})
sleep(1)
ca.update(vals={'name':'sijan Shs'})
ca.detail()
cb = Contact()
cb.detail()
cb.update(vals={'name':'Aurelia','age':32,'id':cb.get_id()})
print ("calling contact 1")
ca.detail()
print ("calling contact 2")
cb.detail()
Ich habe einige Änderungen vorgenommen, und es scheint zu funktionieren. Hast du irgendwelche Vorschläge? Ist das die richtige Art, Suffs zu machen? –