Python — подкласс

Как вызвать подкласс, например, 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")

но тоже не работал

Можете описать, что не работает?

Aryan 12.12.2020 06:43

@AryanMishra оба метода не работают, я попробовал первый метод, и он поднялся <function Class1.Class2.function at 0x0000021E8DAACCA0>

RaphielHS 12.12.2020 06:44

Подклассы Python не предназначены для работы как иерархия доменных имен. Кроме того, это не подклассы — это вложенные классы, которые редко нужны и имеют некоторые неуклюжие особенности области видимости.

user2357112 12.12.2020 06:45

@RaphielHS, вы пропустили указание параметра self в методах

JacksonPro 12.12.2020 06:46

Почему вы делаете это в первую очередь? Существует очень мало проблем, которые решают вложенные классы.

user2357112 12.12.2020 06:48

На самом деле, ваш второй фрагмент создает подкласс. Непонятно, какова ваша настоящая цель, за терминологической путаницей. Является ли фраза «точно так же, как субдомены» догадкой о том, как работают подклассы, или ваша цель — создать интерфейс, который работает именно так? Что представляют собой эти классы?

user2357112 12.12.2020 06:52

@user2357112supportsMonica, я планирую сделать API для поддержки Python, я знаю хороший API, но работает только для NodeJS, поэтому я увидел одну из таких функций, как a.b.function

RaphielHS 12.12.2020 06:54

Чтобы было ясно, в вашем первом примере B не является подклассом A. Он просто определен в пространстве имен класса A, но ничего не наследует от A.

tdelaney 12.12.2020 06:54

@RaphielHS: это похоже на работу либо для атрибутов экземпляра, либо для пакетов и подмодулей. Это не похоже на работу для вложенных классов.

user2357112 12.12.2020 06:59

@user2357112supportsMonica Мне пришлось закричать, потому что дискуссия сама по себе превратилась в форум. Мне очень жаль :-)

Aryan 12.12.2020 07:02
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
10
82
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы не добавили аргумент 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"

Другие вопросы по теме