Использование метода класса вне класса и внутри класса - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь по-настоящему понять, что происходит с методами класса в python, и натолкнулся на следующее, что я не могу понять.

Мой код:

class exampleclass():

    def __init__(self,text):
        self.text = text

        self.firstletter = text[0]

        # the method has to be run --> with ()
        self.lastletter = self.methodlast()

        # the option that I used to use:
        self.secondletter = self.method2(self.text)

        # with the variable last letter I do something else
        # The order is important. lastletter is already defined here.

    def methodlast(self):
        return self.text[-1]

    def method2(self, text):
        return text[1]

    def methodX5(self):
        # addind a variable to the class
        self.longstring = self.lastletter * 5

Я намерен создать атрибуты метода класса по методу, и я также хочу, чтобы к методам можно было получить индивидуальный доступ извне класса.

в идеале мне бы хотелось:

cla_ins = exampleclass("this is a text")

Но Я также хочу использовать метод независимо от экземпляра класса:

second_letter  = exampleclass.method2("whatever")

Использование метода, вызывающего класс, не нормально:

try:
    a =exampleclass.method2("whatever")
    print(a)
except Exception as e: 
    print(str(e))

выдает ошибку:

method2() missing 1 required positional argument: 'text'

Использование экземпляра работает:

try:
    a = cla_ins.method2("whatever")
    print(a)
except Exception as e: 
    print(str(e))

Как создать класс, чтобы иметь доступ к методам изнутри класса, а также извне?

Изнутри я имею в виду:

self.secondletter = self.method2(self.text)

Со стороны я имею в виду:

a = exampleclass.mehtod2("whatever")

Похоже, я могу вызывать класс метода только с использованием экземпляра класса. Это сделало бы все мои рассуждения недействительными. то есть я использую метод с экземплярами или не использую метод извне, верно?

До сих пор обращались к другим ссылкам:

Ответы [ 3 ]

1 голос
/ 02 мая 2020

Вы уверены, что не сделали опечатку. mehtod2! = method2

0 голосов
/ 02 мая 2020

Я думаю, в вашем коде есть опечатка. Вы сделали метод method2, но вызываете метод mehtod2.

0 голосов
/ 02 мая 2020

Похоже, я могу вызывать метод [только для класса], используя экземпляр класса.

Это верно.

Вы можете использовать @classmethod аннотация для создания метода класса. Обратите внимание, что метод класса не может изменить состояние экземпляра (поэтому method2 в вашем примере можно использовать как метод класса, добавив аннотацию и изменив параметр self в сигнатуре на cls для ясности).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...