Как вызвать подкласс, например, class1.class2.function, так же как и поддомены, shop.domain.com я пробовал этот способ
class A:
class B:
def ping():
print("Hi")
a = A()
b = a.B()
но это не сработало. я тоже пробовал
class A:
def ping():
print("Class A")
class B(A):
def pingB():
print("Class B")
но тоже не работал
@AryanMishra оба метода не работают, я попробовал первый метод, и он поднялся <function Class1.Class2.function at 0x0000021E8DAACCA0>
Подклассы Python не предназначены для работы как иерархия доменных имен. Кроме того, это не подклассы — это вложенные классы, которые редко нужны и имеют некоторые неуклюжие особенности области видимости.
@RaphielHS, вы пропустили указание параметра self в методах
Почему вы делаете это в первую очередь? Существует очень мало проблем, которые решают вложенные классы.
На самом деле, ваш второй фрагмент создает подкласс. Непонятно, какова ваша настоящая цель, за терминологической путаницей. Является ли фраза «точно так же, как субдомены» догадкой о том, как работают подклассы, или ваша цель — создать интерфейс, который работает именно так? Что представляют собой эти классы?
@user2357112supportsMonica, я планирую сделать API для поддержки Python, я знаю хороший API, но работает только для NodeJS, поэтому я увидел одну из таких функций, как a.b.function
Чтобы было ясно, в вашем первом примере B не является подклассом A. Он просто определен в пространстве имен класса A, но ничего не наследует от A.
@RaphielHS: это похоже на работу либо для атрибутов экземпляра, либо для пакетов и подмодулей. Это не похоже на работу для вложенных классов.
@user2357112supportsMonica Мне пришлось закричать, потому что дискуссия сама по себе превратилась в форум. Мне очень жаль :-)
Вы не добавили аргумент self
-
В ПЕРВОМ СЛУЧАЕ:
class A:
class B:
def ping(self):
print("Hi")
a = A()
b = a.B()
b.ping()
ВО ВТОРОМ СЛУЧАЕ:
class A:
def ping():
print("Class A")
class B(A):
def pingB(self):
print("Class B")
b = B()
b.pingB()
Надеюсь, эта информация будет вам полезна!
Удачного кодирования!
Вам по-прежнему нужно вызывать функцию в классе B
при инициализации b
в качестве подкласса B
. Кроме того, функциям внутри класса нужен параметр self
.
class A:
class B:
def ping(self):
print("Hi")
a = A() # Initializing variable <a> as new object to class <A>
b = a.B() # Initializing variable <b> as new object to class <B> (Subclass of a)
b.ping() # Calling function <ping> which should print the string "Hi"
Можете описать, что не работает?