简体   繁体   中英

no value for argument self in unbound method call

Thanks for reading this. I've spent the past 48 hours trying to get this code to work. First of all I must disclose that this is for a college assignment. I'm not looking for any assistance or comment on how I might 'gain' in the assignment, I just need to figure out what I'm doing wrong. I have googled the issue and I've read through tutorials on classes and I do feel like I understand them and have got the examples to work. This one issue is stumping me.

So, I have a class which will read a database as follows:

import mysql.connector
import pandas as pd

class DAOdv:
    #dbConn=mysql.connector.connect()
    def __init__(self):
        # import the config file
        config=pd.read_csv('./files/config.ini')
        dbName=config.iloc[int(config[config['item']=='databaseName'].index[0])]['setting']
        uname=config.iloc[int(config[config['item']=='username'].index[0])]['setting']
        hst=config.iloc[int(config[config['item']=='host'].index[0])]['setting']
        prt=config.iloc[int(config[config['item']=='port'].index[0])]['setting']

        # create the connection
        self.dbConn=mysql.connector.connect(
            host=hst,
            database=dbName,
            port=prt,
            username=uname,
            password='' # no password on Server as yet
        )

    def allClients(self):
        cursor=self.dbConn.cursor()
        sSQL = 'SELECT * FROM clients'
        cursor.execute(sSQL)
        results=cursor.fetchall()
        return results

daoDV=DAOdv()

and the 'server' code which is:

from flask import Flask
from daoDV import DAOdv

app=Flask(__name__, static_url_path='',static_folder='')

# curl "http://127.0.0.1:5000/clients"
@app.route('/clients')
def getAll():
    results=DAOdv.allClients()
    return results

In python, the second last line above, DAOdv is underlined in red and hovering over it produces the message "no value for argument self in unbound method call"

What am I doing wrong? I'm assuming the error is in the class?? but I can't figure out what.

Many thanks for your help with this.

Seamus

DAOdv is the class itself, not the instantiated object which you create at the end with: daoDV=DAOdv() .

Change your server code to:

from daoDV import daoDV  # note the capitalization - we're importing the object here

#(...)
results = daoDV.allClients()

Your method allClients() is an instance method, not a class method. That's why you should call it like:

results=DAOdv().allClients()

Methods can be an instance or class method. Class methods are methods which have @classmethod decorator.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM