>

나는 다음과 같은 간단한 수업을 가지고 있습니다 :

connection  DB 연결이 있습니다

import pandas as pd
from animal import kettle
class cat:
    def foo(connection):
        a=pd.read_sql('select * from zoo',connection)
        return1= kettle.boo1(a)
        return2= kettle.boo2(a)
        return return1,return2

이제 a 를 통과하고 싶습니다  둘 다 boo1  그리고 boo2  주전자, 위의 foo ()에서 올바른 방법으로 전달합니까?

위의 방법이 정확하다고 생각했지만이 방법을 시도했지만이 방법이 통과합니까?

animal.py :
class kettle:
    def boo1(return1):
         print(return1)
    def boo2(return2):
        print(return2)

이것이 말이되지 않으면 죄송합니다. 내 의도는 a 를 통과  둘 다 boo1  그리고 boo2  와이즈 비츠  수업

kettle

  • 답변 # 1

    이것은 나에게 올바른 접근법처럼 보입니다 : pd.read_sql('select * from zoo', connection) 의 반환 값을 할당하여   a 로  먼저 a 를 전달   kettle.boo1 로  그리고 kettle.boo2  시간이 많이 걸리는 데이터베이스 IO 만 한 번만 수행해야합니다.

    list/dicts/dataframes와 같은 객체를 전달할 때이 디자인 패턴을 염두에 두어야 할 것은 kettle.boo1 의 문제입니다.   a 에있는 값을 변경합니다 . 그렇다면 kettle.boo2  수정 된 버전의 a 를받습니다.  예기치 않은 동작으로 이어질 수있는 입력으로 사용됩니다.

    최소한 예는 다음과 같습니다 :

    >>> def foo(x):
    ...     x[0] = 'b'
    ...
    >>> x = ['a']  # define a list of length 1
    >>> foo(x)  # call a function that modifies the first element in x
    >>> print(x)  # the value in x has changed
    ['b']
    
    

  • 답변 # 2

    문제에 대한 해결책은 여러 가지가 있습니다.Python에서 객체 지향 프로그래밍을 시작하고

    unbound method boo1() must be called with kettle instance as first argument
    
    

    아마도이 솔루션을 원할 것입니다 :

    클래스 메소드에 인스턴스 매개 변수 제공 :

    def boo1(self, return1):
    
    

    cat.foo에서 클래스 주전자를 확인하십시오 :

    k = kettle()
    
    

    그런 다음 사용하십시오 :

    k.boo1(a)
    
    

    boo2 방법과 동일합니다.

    또한 다음을 원할 것입니다 :

    return return1  # instead of or after print(return1)
    
    

    당신의 메소드가 None 를 반환함에 따라  지금.

  • 이전 wordpress - WooCommerce에 대한 functionsphp를 사용하여 특정 제품의 현재 재고를 얻으려면 어떻게해야합니까?
  • 다음 c# - 왜 SystemArgumentOutOfRangeException이 발생하는지 모르겠습니다