2016-07-29 7 views
-5

Ich versuche den Quellcode von Beautifulsoup zu verstehen.Wie interpretiert Python Argumente in der Klassendefinition?

Die ersten Zeilen des Quellcodes ist:

class Beautifulsoup(Tag): 
    def __init__(self, markup="", features=None, builder=None, 
    parse_only=None, from_encoding=None, exclude_encodings=None, 
    **kwargs): 
     ... 

Es gibt nur ein Argument ist in der ersten Zeile als „Tag“, aber viele mehr in der init Funktion. Auf der anderen Seite, ich weiß, wir irgendwie diese Weise verwenden beautifulsoup in der Regel:

from bs4 import Beautifulsoup 
bsobj = Beautifulsoup(text, parser) 
  1. Was ist das „Tag“ Argument in der Klassendefinition?

Update: Wie gesagt in @BusyAnt @Vatine ‚s Antwort, Tag ist kein Argument, sondern die Superklasse von BeautifulSoup. Und ich fand Tag der Klassendefinition in einer anderen Datei:

class Tag(PageElement): 

"""Represents a found HTML tag with its attributes and contents.""" 

def __init__(self, parser=None, builder=None, name=None, namespace=None, 
      prefix=None, attrs=None, parent=None, previous=None): 
    "Basic constructor." 

Und schließlich PageElement ist auch eine Klasse in der gleichen Datei definiert:

class PageElement(object): 
"""Contains the navigational information for some part of the page 
(either a tag or a piece of text)""" 

Whooo!

  1. Welches Argument in der init entspricht Text und Parser in der tatsächlichen Verwendung?
+0

Beziehen Sie sich auf 'Klasse Beatifoussoup (Tag)'? Oder fragen Sie, wie Funktionsparameter in Python funktionieren? –

+0

ist dasselbe wie die Argumente der normalen Funktion, außer dass das erste Selbst auf die Klasse selbst verweist. – YOU

Antwort

1
  1. Tag ist die Klasse, die BeautifoulSoup erbt von. Es ist kein Argument. Bitte take a look at this, um mehr zu erfahren.

  2. Was die Argumente in __init__: self bezieht sich auf die Instanz der Klasse, die erstellt werden. Die anderen Argumente werden mit Standardwerten geschrieben, was bedeutet, dass sie diesen Wert annehmen, wenn sie beim Aufruf der Methode nicht angegeben werden. Und da Sie in Ihrem Beispiel zwei Argumente ohne Namen angegeben haben, wird die Positionsreihenfolge verwendet, dh und features=parser. Here wäre ein guter Weg, um darüber zu lernen.


Ich bin nicht bereit, hart zu klingen, aber es könnte nicht die beste Idee in diesem Quellcode zu starten wandert, während Sie nicht vertraut mit den Konzepten der Klassen, Objekte sind, und einige andere grundlegende Sachen in Python.

+1

Ich werde einige Zeit brauchen, um die von Ihnen empfohlenen Materialien zu lesen. Danke! – Houken

+0

Sie haben eine gute Verfassung. Sie können viele einfache Beispiele zu diesem und anderen Dingen im Internet finden oder sogar hier in [StackOverflow Dowumentation] (http://stackoverflow.com/documentation/python/topics). – BusyAnt

1

Die Zeile class BeautifulSoup(Tag): bedeutet "Bitte beginnen Sie mit der Definition einer Klasse namens BeautifulSoup, die von der Klasse Tag erbt".

Die Linie (n) def __init__(self, markup="", features=None... bedeuten „der Konstruktor der Klasse lassen die Argumente nehmen ...“, mit der sehr erste ist die Instanz der Konstruktor auf aufgerufen wird (es ist nicht notwendig, diese self zu nennen, aber es ist stark empfohlen). Der Rest der Argumente funktioniert wie bei einer normalen Funktion.

In dem speziellen Aufruf Sie haben gezeigt, markup den Wert von text und features erhalten, dass von parser (Sie alle Schlüsselwörter nicht verwenden, so werden sie Positions sein, wobei die meisten von ihnen Standardwerte haben).

Verwandte Themen