Dies ist der 12/2-Artikel von PyCon JP Adventskalender 2016. Es gibt andere interessante Artikel. Wenn Sie interessiert sind, tun Sie dies bitte. Es gibt Stellen, an denen Java geschrieben ist, aber es kann falsch sein, weil es eine Weile her ist. Ich hoffe, Sie können es lesen, während Sie die Atmosphäre beobachten.
Wie das Thema sagt, werde ich die Fehler, die ich gemacht habe, teilen, damit diejenigen, die dies lesen, den Übergang von Javaer zu Pythonista reibungslos gestalten können.
Ein Mitglied der PyCon JP 2017. Apropos Aktivitäten im Zusammenhang mit PyCon, Talk in 2015 und LT in 2016 / watch? v = O1-9Yv9cB8Q & t = 820s) Das erste Python Boot Camp war auch Dozent. Twitter-Account ist @horobi_gengar
In Bezug auf das Thema halte ich es für notwendig, daher werde ich kurz die Sprache erläutern, die bisher in der Entwicklung verwendet wurde.
Auftrag | Anmeldefrist | Muttersprache | Ergänzung |
---|---|---|---|
1. Firma | Zweieinhalb Jahre | nichts Besonderes | c oder vb. Je nach Standort flexibel |
2. Firma | 5 ½ Jahre | Java | Außerdem JavaScript, Delphi, COBOL usw. |
3. Firma | 5 Monate | nichts Besonderes | C#Und PHP nach und nach |
4. Firma | 2 Jahre | Python | Sehr selten in Ruby verwickelt |
5. Firma | 3 Monate(Laufend) | Python | Schreiben Sie ab und zu JavaScript |
Diese Geschichte handelt also von der 4. Firma.
Ich habe viele Fehler gemacht, aber dies war der größte. Java wird grundsätzlich in einer Datei und einer Klasse (mit Ausnahmen) beschrieben, Python beschreibt jedoch häufig mehrere Klassen in einer Datei. In Bezug auf das Image muss Python mit einem Image geschrieben werden, das eine Pakethierarchie weniger als Java aufweist.
Ich werde es zusammen mit dem Bild des Pakets (Ordnerstruktur) erklären. Wenn es sich beispielsweise um DAO handelt, um auf die Benutzertabelle im allgemeinen Modul zuzugreifen
common └db └dao
Erstellen Sie eine Datei mit dem Namen Users.java unter dem Paket Users und erstellen Sie eine Klasse mit dem Namen Users.
Und wenn Sie diese Users-Klasse aus einer anderen Klasse verwenden möchten,
Users.java
package common.db.dao.Users
users = new Users()
user = users.getUser(1)
Es fühlt sich an wie. Wenn Sie jedoch in Python mit derselben Paketstruktur schreiben,
users.py
from common.db.dao.users import Users
users = Users()
user = users.get_user(1)
Es wird so und das Ende von von und der Inhalt des Imports werden überlagert, was hilfreich ist. Erstellen Sie in diesem Fall also dao.py unter dem db-Paket, beschreiben Sie die darin enthaltene Users-Klasse und
users.py
from common.db.dao import Users
users = Users()
user = users.get_user(1)
Es sollte so beschrieben werden. (Dies scheint eine große Sache für die Größe der Dao-Datei zu sein, aber es ist nur ein Beispiel) Aufgrund dieses Fehlers wurde beschlossen, ein Modul mit einer bestimmten Erfolgsbilanz vorsichtig zu modifizieren.
Wenn Sie im Fall von Java am Anfang der internen Variablen der Klasse public oder private hinzufügen, können Sie explizit angeben, ob von außen auf sie verwiesen werden kann.
User.java
public class User{
public int userId; //Zugänglich von außerhalb der Klasse
private String userName; //Von außerhalb der Klasse nicht zugänglich
public User(int userId, String userName){
this.userId = userId
this.userName = userName
}
}
User u = new User(1, "Yamada Taro")
System.out.println(u.userId) //sicher
System.out.println(u.userName)//aus
Andererseits ist es im Fall von Python durch Hinzufügen von "_ (Unterstrich)" zum Variablennamen möglich, öffentlich und privat in Java zu steuern. (Wenn Sie es tun möchten, können Sie darauf verweisen.)
user.py
class User(object):
def __init__(self, user_id, user_name):
self.user_id = user_id #Zugänglich von außerhalb der Klasse
self.__user_name = user_name #Von außerhalb der Klasse nicht zugänglich
u = User(1, 'Yamada Taro')
print(u.uer_id) #sicher
print(u.__user_name)#aus
Als ich anfing, Python zu schreiben, habe ich meine Gedanken falsch verstanden und mich an die folgenden Sprachspezifikationen erinnert.
user.py
class User(object):
user_id = 0 #Wenn Sie es an dieser Stelle schreiben, können Sie von außerhalb der Klasse darauf zugreifen
def __init__(self, user_id, user_name):
self.user_id = user_id
self.user_name = user_name #Wenn nicht geschrieben, wird es als privat behandelt
u = User(1, 'Yamada Taro')
print(u.uer_id) #sicher
print(u.user_name)#aus(ich dachte)
Warum ist das passiert? Natürlich kann von außen so oft auf Benutzername zugegriffen werden, wie Sie möchten. Als ich das bemerkte, lief mir kalte Luft auf den Rücken und es sollte ein Festival mit zwei Unterstangen stattfinden.
Geben Sie im Fall von Java keine internen Variablen als öffentlich an, sondern erstellen Sie Getter und Setter unter Berücksichtigung des Einflussbereichs usw.
User.java
public class User{
private int userId; //Halten Sie interne Variablen von außen unzugänglich
private String userName;
public User(int userId, String userName){
this.userId = userId
this.userName = userName
}
public int getUserId(){
return this.userId;
}
public int getUserName(){
return this.userName;
}
}
User u = new User(1, "Yamada Taro")
System.out.println(u.getUserId()) //Kapselung durch Sandwiching einer Funktion, anstatt eine interne Variable direkt aufzurufen
System.out.println(u.getUserName())
Schließlich hat Eclipse die Funktion, Getter und Setter gleichzeitig zu erstellen. Also habe ich dasselbe mit Python gemacht.
user.py
class User(object):
def __init__(self, user_id, user_name):
self.__user_id = user_id
self.__user_name = user_name
def get_user_id(self):
return self.__user_id
def get_user_name(self):
return self.__user_name
u = User(1, 'Yamada Taro')
print(u.get_user_id())
print(u.get_user_name())#Verwenden Sie es so
Einer der Vorzüge sogenannter Lightweight-Sprachen wie Python ist "geringe Menge an Code". Diese schlechte Beschreibungsmethode ist ein sehr schlechtes Know-how, das seine Vorzüge vollständig zunichte macht. Es tut uns leid. Im Fall von Python ist dies in Ordnung.
user.py
class User(object):
def __init__(self, user_id, user_name):
self.user_id = user_id #Keine Unterleisten mehr, wenn sie direkt von außen zugänglich sind
self.user_name = user_name
u = User(1, 'Yamada Taro')
print(u.user_id)
u.user_name = 'Jiro Suzuki' #Sie können so oft darauf zugreifen, wie Sie möchten, aber das ist in Ordnung! !! !!
Wenn Sie sich wirklich dafür interessieren, sollten Sie auch Eigentum verwenden.
user.py
class User(object):
def __init__(self, user_id, user_name):
self.__user_id = user_id
self.__user_name = user_name
@property #Wenn es schreibgeschützt ist, sieht es so aus
def user_id(self):
return self.__user_id
@property
def user_name(self):
return self.__user_name
u = User(1, 'Yamada Taro')
print(u.user_id) #sicher
u.user_name = 'Jiro Suzuki' #aus! !! !! !!
Es ist wichtig, richtig zu schreiben.
Bisher mehrmals "Der Python, den Sie geschrieben haben, ist Java-ähnlich" "Ich bin Javaer, aber der Python, den Sie geschrieben haben, ist leicht zu lesen." Mir wurde gesagt, dass ich sehr besorgt darüber sei, also schrieb ich diesen Artikel. Im Vergleich zu Python, das von jemandem geschrieben wurde, der schon lange andere leichte Sprachen geschrieben hat, ist das Python, das ich geschrieben habe, etwas steif und Java-ähnlich. Ich schreibe jetzt seit zwei Jahren Python, daher denke ich, dass der Java-Geruch verschwunden ist, aber ich werde mich weiterhin jeden Tag widmen.