Je suis encore novice en matière de cours, et je me bats un peu dans une sous-classe que j'essaie de mettre en œuvre.Accéder aux objets de la superclasse de la sous-classe
J'ai donc ma classe Nitin
en tant que tel:
import requests
from bs4 import BeautifulSoup
class Nitin(object):
def __init__(self, username, password):
self.username = username
self.password = password
self.session = requests.session()
self.urls = {'base': 'http://nitinproductions.com/models/', 'models': 'http://nitinproductions.com/models/models.php'}
def login(self):
self.session.auth = (self.username, self.password)
r = self.session.get(self.urls['models'])
return self.session
Cette étape est très bien, comme je peux ouvrir une session et self.session
est mises à jour dans la fonction login()
. Maintenant, j'ai une sous-classe Model
, qui devrait avoir accès à l'original Nitin.session
.
class Model(Nitin):
def __init__(self, nitin, model):
super(Model, self).__init__(nitin)
self.model = model
self.nitin = nitin
def media(self):
r = self.nitin.session.get(self.model)
print(r.status_code)
soup = BeautifulSoup(r.text, 'html.parser')
for table in soup.find('div', {'id': 'photobar'}).findAll('table'):
print(table)
J'essaie de le faire dans mon code principal comme suit:
# Imports all Nitin classes
from src import *
# Initialize Nitin object
ripper = Nitin(username='aaaa', password='bbb')
# Initialize session with u/p
ripper.login()
# Initialize Model by passing the Nitin object to it, as well as a link
model = Model(nitin=ripper, model='http://nitinproductions.com/models/lexxiliegh/lexxiliegh.php')
Mais cela soulève l'exception suivante:
model = Model(nitin=ripper, model='http://nitinproductions.com/models/lexxiliegh/lexxiliegh.php')
File "/home/redact/git/redact/src/Nitin.py", line 32, in __init__
super(Model, self).__init__(nitin)
TypeError: __init__() missing 1 required positional argument: 'password'
Je pense que je comprends les classes worng. Je voudrais vraiment faire ce qui suit:
rippper = Nitin(username='aaaa', password='bbbb)
rippper.login()
rippper.Model.media()
Mais je ne sais pas si c'est possible.
après avoir effectué les changements que vous proposez cela fonctionne, mais je voudrais savoir s'il y a un moyen d'appeler la classe '' model' comme Nitin.Model.some_function_from_Model() 'après que j'ai initialisé 'Nitin'. Où 'Nitin' est initialisé et la session créée, et je peux juste continuer à travailler avec' Model'. – rhillhouse
@ou_snaaksie. Ensuite, initialisez 'self.model' dans' Nitin .__ init__'. Vous pouvez passer 'self' à' Model .__ init__' comme vous le faites dans le code externe maintenant. –
Je ne comprends pas très bien .. désolé. Pourriez-vous mettre à jour votre réponse avec ce que vous venez de dire? Les cours me confondent – rhillhouse