Heim >Backend-Entwicklung >Python-Tutorial >Über Klassen und Methoden in der objektorientierten Python-Programmierung

Über Klassen und Methoden in der objektorientierten Python-Programmierung

高洛峰
高洛峰Original
2017-03-01 13:33:381439Durchsuche

Klassen und Instanzen

Python ist eine objektorientierte Sprache, und die wichtigsten Konzepte der Objektorientierung sind Klassen und Instanzen Ich verstand diese sehr gut, als ich es zum ersten Mal lernte, bis der Lehrer sagte: „Das ist eine Klasse.“ >

Eine Klasse besteht eigentlich darin, Dinge mit den gleichen Eigenschaften in einer Kategorie zu gruppieren, zum Beispiel menschlich

Wir haben es definiert die menschliche Klasse, aber der Mensch hat einige Eigenschaften, wie zum Beispiel zwei Augen und einen Mund, wir fügen diese hinzu
class Person(object):
  pass

Ich habe bereits einige Informationen darüber geschrieben die Person, aber die Person hat immer noch einen Namen, so wie ich, Nerz. Nun, ich kann mich nicht schlecht behandeln, ich muss diese hinzufügen 🎜>
class Person(object):
  eyes = 2
  mouth = 1
Es ist so perfekt, dass eine Person es endlich geschafft hat. Es hat einen Tag gedauert, und ich habe nur eine Minute gebraucht (nur ein Scherz). Wir haben die Informationen gelesen. Menschen haben zwei Augen, einen Mund und ihr Name ist Nerz . - -! Etwas stimmt nicht, Nerz ist mein Name.

Nerz ist der Name von Menschen, der Name von Menschen ist offensichtlich falsch, „wo“ sollte ein menschliches Individuum sein, ein Single Beispiel

class Person(object):
  eyes = 2
  mouth = 1
  name = mink

Jetzt habe ich stattdessen endlich meinen eigenen Namen. Damit jeder sie teilen kann, heißt diese Methode Instanz, aber ich habe eine Fähigkeit, die andere nicht haben Wissen Sie, ich bin nicht von der Schwerkraft betroffen.


class Person(object):
  eyes = 2
  mouth = 1
  
  def __init__(self, name):
    self.name = name 

me = Person('mink')

Klassenmethode und statische Methoden

Sie können oft @classmethod sehen und @staticmethod in Python, die als Klassenmethoden und Instanzmethoden bezeichnet werden.

class Person(object):
  eyes = 2
  mouth = 1

  def __init__(self, name)
    self.name = name 

  def jineng(self, txt):
    print "%s %s" % (self.name, txt)

me = Person('mink')
me.jineng("我不受重力影响, 我会飞")

Erstellte eine Tierklasse, generierte eine Instanz von cat und druckte die Name und Alter der Katze. Es ist ersichtlich, dass die Attribute der Animal-Klasse zurückgegeben werden, d. h. die Instanz greift auf das -Attribut der Klasse

class Animal(object):
  name = 'lili'
  age = 1

cat = Animal()
print cat.name, cat.age   # print 'lili' 1

Das heißt, diese standardmäßig hinzugefügte Methode ist eine Instanzmethode. Die Instanzmethode ändert die Attribute der Instanz, während sich die Attribute der Klasse nicht ändern

Erklärung, dass Instanzmethoden die Attribute der Klasse nicht ändern können, aber was soll ich tun, wenn ich die Attribute der Klasse ändern möchte
# 显示内容是一样的
print cat.name, cat.age
print Animal.name, Animal.age
给Animal类添加一个方法(函数)

class Animal(object):
  name = 'lili'
  age = 1

  def edit(self, name, age):
    self.name = name
    self.age = age

cat = Animal()
cat.edit('rol', 2)

print cat.name, cat.age     # print 'rol' 2
print Animal.name, Animal.age  # print 'lili' 1

Hier ist zu beachten, dass der erste Parameter der Bearbeitungsfunktion von self in cls geändert wird. In Python wird empfohlen, cls in der Klassenmethode und im Parameter zu verwenden der Instanzmethode ist self, und hier wird erklärt, dass die Instanz verwendet werden kann. Klassenmethode (Funktion)
# 我们修改一下这个函数
def edit(self, name, age):
  name = name
  self.age = age

cat = Animal()
cat.edit('rol', 2)

print cat.name, cat.age     # pirnt 'rol' 2
print Animal.name, cat.age   # print 'lili' 1
Dann füge ich dieser Klasse eine Init-Methode hinzu, um Attribute zu initialisieren

# 再一次修改edit
@classmethod
def edit(cls, name, age):
  cls.name = name
  cls.age = age

cat = Animal()
cat.edit('rol', 2)

print cat.name, cat.age     # print 'rol' 2
print Animal.name, Animal.age  # print 'rol' 2
Nach dem Hinzufügen von __init__ verwendet cat die Attribute der Klasse nicht und ändert die Bearbeitungsmethode, ohne die Attribute der Cat-Instanz zu ändern

Dies zeigt, dass staticmethod die Attribute und Methoden der Instanz nicht verwenden kann. Dann können Sie natürlich keine Klassen verwenden

class Animal(object):
  name = 'lili'
  age = 1

  def __init__(self, name, age):
    self.name = name
    self.age = age
  ...

cat = Animal('kuku', 4)
cat.edit('rol', 2)

print cat.name, cat.age     # print 'kuku' 4
print Animal.name, Animal.age  # print 'rol' 2

Auf die statische Methode kann über Klassenmethoden und Instanzmethoden zugegriffen werden.

Zusammenfassend:

Statische Methode (statische Methode)
# 添加staticmethod
@staticmethod
def say_name(name=None):
  if not name:
    name = self.name
  print 'my name is %s.' % name

cat = Animal('kaka', 3)
cat.say_name()        
# 运行的话会报 NameError: global name 'self' is not defined  
# 那是不是没给他添加self字段, 所以没找到
def say_name(self, name=None):
  ...

cat.say_name()
# TypeError: say_name() takes at least 1 argument(0 given), 显示缺少参数

Statische Methode kann nicht verwendet werden die Attribute und Methoden der Instanz

Statische Methode kann die Attribute und Methoden der Klasse nicht verwenden

Statische Methode Kann über eine Klasse oder Instanz aufgerufen werden

# 我们修改一下代码
# 先创建一个实例的方法, 他使用类的staticmethod

@staticmethod
def say_name(name):
  print 'my name is %s.' % name

def say(self):
  self.say_name(self.name)
  
@classmethod
def _say(cls):
  cls.say_name(cls.name)

cat = Animal('kaka', 3)
cat.say()
cat._say()
Statische Methode ist äquivalent zu einer globalen Funktion mit Gültigkeitsbereich in der Klasse

Klassenmethode (Klassenmethode)


Klassenmethode kann die Attribute und Methoden der Klasse verwenden
Klassenmethoden können statische Methoden verwenden

Klassenmethoden können über Klassen oder Instanzen aufgerufen werden

Weitere Informationen zur objektorientierten Python-Programmierung Für Artikel zu Klassen und Methoden achten Sie bitte auf PHP-Chinesisch Webseite!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn