Kolaylık sağlamak için paketlediğim birkaç dosyayı kapsayan python kodum var: my_package dizininin altındaki aşağıdaki 3 dosyayla sonlandırıyorum:autoreload ve package neden TypeError: super (tür, obj): nesne tür veya alt türü olmalıdır
__init__.py
içeriği:
from file1 import *
from file2 import *
file1.py içeriği:
class Base(object):
pass
file2.p y içeriği:
from file1 import Base
class Derived(Base):
def __init__(self):
return super(Derived, self).__init__()
Sonra ipython yürütmek
: Şimdiye kadar
>>>%autoreload 2
>>>import my_package
>>>t = my_package.Derived()
çok iyi. Ama sonra ben dosya2.py'de değişiklik yapıyorum, kukla özelliği ekleyerek söyleyin. Şimdi yürütmek zaman: Ben ipython konsolunu yeniden başlatana kadar
>>>t = my_package.Derived()
>>> 2 class Derived(Base):
>>> 3 def __init__(self):
>>>----> 4 return super(Derived, self).__init__()
>>> 5
>>> 6 dumm = 'asdf'
>>>
>>>TypeError: super(type, obj): obj must be an instance or subtype of type
Bu uzağa gitmez. Neden otomatik olarak doğru şekilde ilgilenmiyor? Temel ve Türetilmiş'i paket yerine tek bir modül dosyasına koyarsam her şey çalışır.
Bu mantıklıdır. "Dosya2 içe aktarma türetme" yerine * kullanmayı denedim, ancak maalesef bunu düzeltemedi. Otoreload'ın bu paketi anlayamadığı gariptir.Derived güncellenmelidir. – Leo
@Leo B bir '__init __. Py' dosyası içeriyorsa, A.B içe aktarma C''sini kullanırken hata görünüyor. Bu beni çok rahatsız ediyor. – Edityouprofile