2,7 Basis. Voraussetzung ist, dass Sie eine andere Sprache beherrschen.
from import Deklaration "Dezimalklasse aus dem Standardmodul namens Dezimal verwenden"
>>> from decimal import Decimal
Importieren Sie alle Klassen
>>> d = Decimal(10)
>>> print d
10
>>> print d + 3 #Dezimalklasse+Hat eine Methode, die dem Operator entspricht
13
Weitere Informationen zu Decimal finden Sie unter http://docs.python.jp/2/library/decimal.html
>>> class MyClass:
... pass
...
>>> mc = MyClass()
>>> print mc
<__main__.MyClass instance at 0x1076245a8>
Klassennamen werden normalerweise in Kamelfällen geschrieben. pass ist eine Nulloperation und macht nichts.
Python ist nicht in der Lage, Elementvariablendefinitionen zusammen mit Klassendefinitionen zu schreiben. Attribute (Datenelemente) werden für jede Instanz definiert, indem sie Variablen zugewiesen werden, die für die generierte Instanz durch Punkte getrennt sind.
>>> mc = MyClass()
>>> mc.value = 10
>>> print(mc.value)
10
>>> mc2 = MyClass()
>>> print mc2.value
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute 'value'
\ Init (und \ __ new__) wird als konstruktorähnliche Initialisierungsmethode bereitgestellt.
class MyClass:
#Initialisierungsmethode
def __init__(self):
self.h = 'hoge' #Attribute hinzufügen
#Methode
def print_h(self):
print h
mc = MyClass()
mc.print_h() # => 'hoge'
Das Instanzobjekt selbst wird an das erste Argument, self, übergeben. Es ist üblich, sich selbst zu benutzen, aber dies und ich arbeiten auch. Wenn Sie bei der Initialisierung Variablen angeben möchten
class Rect:
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
r = Rect(100, 50)
print r.height # => 50
print r.area # => 5000
so werden. Beachten Sie, dass der Aufrufer der Initialisierungsmethode das erste Argument ignoriert. Wenn Sie sich im Streit vergessen,
>>> class MyClass():
... def hoge():
... print 'hoge'
...
>>> mc = MyClass()
>>> mc.hoge()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: hoge() takes no arguments (1 given)
Wird zu dem Fehler führen.
In Python gibt es keine privaten Schlüsselwörter. Wenn Sie ein Attribut oder einen Methodennamen ausblenden möchten, fügen Sie einen Unterstrich (einen oder zwei) davor ein.
def _private_method():
# ....
def __secret_method():
# ....
In einem Fall ist es üblich, die Absicht auszudrücken, "nicht von außen anzurufen", und in beiden Fällen wird der Name intern automatisch geändert, um ihn von außen nicht mehr abzurufen.
class MyClass:
def __init__(self, size):
self._size = size
self.__size = size
mc = MyClass(100)
print mc._size # => 100
print mc.__size # => AttributeError
Python unterstützt ** Mehrfachvererbung **. Sie können auch neue Klassen erstellen, indem Sie integrierte Typen wie Zahlen und Zeichenfolgen erben.
Klasse
Es scheint, dass das Verhalten etwas anders ist, wenn die geerbte Klasse nicht angegeben ist und wenn das Objekt geerbt wird. Es wird empfohlen, ein Objekt zu erben, wenn es nichts erbt (?).
In Python3 wird das Objekt anscheinend standardmäßig vererbt, wenn die übergeordnete Klasse nicht angegeben wird.
class C1():
pass
print dir(C1) #=> ['__doc__', '__module__']
class C2(object):
pass
print dir(C2) #=> ['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__']
class Rectangle(object):
def __init__(self, w, h):
self.w = w
self.h = h
self.color = 'red'
def area(self):
return self.w * self.h
class Square(Rectangle):
#Definieren Sie die Initialisierungsmethode neu (überschreiben Sie sie)
def __init__(self, length):
self.w = self.h = length
s = Square(100)
print s.area() #=>10000, Methodenaufruf der übergeordneten Klasse
Methodenüberschreibungen sind vollständige Überschreibungen und rufen den übergeordneten Konstruktor nicht automatisch auf. So ist beispielsweise die von der übergeordneten Klasse \ init () oben initialisierte variable Farbe in der Square-Klasseninstanz nicht vorhanden. Um dies zu verhindern, rufen Sie die übergeordnete Methode mit super () auf.
class Square(Rectangle):
def __init__(self, length):
super(Square, self).__init__(length, length)
Ich muss es peinlich nennen. Identifizieren Sie die übergeordnete Klasse, indem Sie Ihren Typ und Ihr Selbst übergeben. Wenn zu diesem Zeitpunkt die übergeordnete Klasse die Objektklasse nicht erbt, tritt ein Fehler auf.
In Python3 scheint es, dass Sie eine Superklasse mit nur "super ()" erhalten können.
Recommended Posts