Im Allgemeinen sollten Sie versuchen, die Menge des auf Dateiebene Code in einem Modul zu minimieren. Mit anderen Worten: Wenn Sie eine Datei importieren möchten, sollte der ausführbare Code in dieser Datei möglichst in einer Funktion oder Klasse enthalten sein. und cat.MakeDogTalk()
sind nicht in einer Funktion oder Klasse, also würde ich sie auf main.py
verschieben.
dog
wird nicht innerhalb MakeDogTalk
sichtbar sein, so würde ich dog
als Parameter entweder mit dem Cat-Konstruktor oder der MakeDogTalk-Methode übergeben.
Ansatz 1: Bestehen der Parameter an den Konstruktor
import cats
#main.py
class Dog():
def __init__(self, name):
self.name = name
def talk(self):
print("My name is "+self.name)
dog = Dog("Boxer")
cat = cats.Cat("pus", dog)
cat.MakeDogTalk()
cat.talk()
#cats.py
class Cat():
def __init__(self, name, dog):
self.name = name
self.dog = dog
def talk(self):
print("my name is "+self.name)
def MakeDogTalk(self):
self.dog.talk()
Ansatz 2: Bestehen der Parameter in die Methode
import cats
class Dog():
def __init__(self, name):
self.name = name
def talk(self):
print("My name is "+self.name)
dog = Dog("Boxer")
cat = cats.Cat("pus")
cat.MakeDogTalk(dog)
cat.talk()
#cats.py
class Cat():
def __init__(self, name):
self.name = name
def talk(self):
print("my name is "+self.name)
def MakeDogTalk(self, dog):
dog.talk()
Es wäre auch einfach sein, alle Ihre Hund-basierte Logik zu halten Exklusiv bei main.py:
#main.py
import cats
class Dog():
def __init__(self, name):
self.name = name
def talk(self):
print("My name is "+self.name)
dog = Dog("Boxer")
cat = cats.Cat("pus")
dog.talk()
cat.talk()
#cats.py
class Cat():
def __init__(self, name):
self.name = name
def talk(self):
print("my name is "+self.name)
... Aber ich nehme an, Sie haben einen guten Grund Sohn in deinem echten Code, damit die Katze damit klarkommt.
Wenn es wirklich unbedingt notwendig ist cat = Cat("pus")
innen cats.py
zu halten, dann werden Sie es in einer Funktion setzen müssen. Wenn es im Bereich der Dateiebene bleibt, wird MakeDogTalk
ausgeführt, bevor import cats
fertig ausgeführt wird, was geschieht, bevor die Dog
Klasse sogar existiert, so dass es ein No-Go ist. Dies fügt eine kleine Komplikation hinzu, die cats.cat
nicht mehr von main.py zugänglich ist, aber Sie können das Objekt immer noch abrufen, indem Sie es aus dem Funktionsaufruf zurückgeben.
#main.py
import cats
class Dog():
def __init__(self, name):
self.name = name
def talk(self):
print("My name is "+self.name)
dog = Dog("Boxer")
cat = cats.do_cat_thing(dog)
cat.talk()
#cats.py
class Cat():
def __init__(self, name):
self.name = name
def talk(self):
print("my name is "+self.name)
def MakeDogTalk(self, dog):
dog.talk()
def do_cat_thing(dog):
cat = Cat("pus")
cat.MakeDogTalk(dog)
return cat
Es kann auch sinnvoll, die Dog
Klasse in einer eigenen Datei zu setzen, auch. Da die Cat-Klasse von der Hundeklasse abhängt, sollte die Katzen-Datei die Hundedatei importieren. Auf diese Weise können Sie Ihre in cats.py und auf Dateiebene behalten, wenn dies aus irgendeinem Grund erforderlich ist.
#main.py
import cats
cats.cat.talk()
#cats.py
import dogs
class Cat():
def __init__(self, name):
self.name = name
def talk(self):
print("my name is "+self.name)
def MakeDogTalk(self):
dogs.dog.talk()
cat = Cat("pus")
cat.MakeDogTalk()
#dogs.py
class Dog():
def __init__(self, name):
self.name = name
def talk(self):
print("My name is "+self.name)
dog = Dog("Boxer")
auch, ich laufe die main.py Datei ... – olegje31