Питон 3 сам.атрибуты в методе - PullRequest
0 голосов
/ 14 мая 2018

Предположим, что существует простой класс с атрибутами и методом.

class c:

    def __init__(self, a, b):
        self.a = a
        self.b = b

    def f(self):
        return(self.a + self.b)

plus = c(2, 2)
print(c.f(plus))

print(c(2, 2).f())

Если я распечатаю это, сначала создав объект, все будет работать.Но когда я передаю атрибуты самому методу, я получаю сообщение об ошибке.

print(c.f(2, 2))

Итак, можно ли передать атрибуты самому методу без создания объекта, как в обычной функции?Я делаю что-то не так, или я должен использовать нормальную функцию вместо метода в этом случае?Спасибо, ребята и девушки за помощь;)

Ответы [ 3 ]

0 голосов
/ 14 мая 2018

Если вы хотите избежать создания экземпляра вашего класса, вы можете использовать декоратор @staticmethod:

class C:

    @staticmethod
    def f(a, b):
        return a + b

>>> C.f(2, 2)
4

Я бы также рекомендовал следовать соглашениям PEP 8 и использовать CapWords для именования классов.

0 голосов
/ 14 мая 2018

Думайте о классах как о плесени.Вы на самом деле не взаимодействуете с самой формой, но используете форму для создания объектов, с которыми затем можете взаимодействовать.Чтобы что-то сделать с объектом, сначала нужно его создать.Это называется Instantiation.

0 голосов
/ 14 мая 2018

Вы можете использовать staticmethod:

class c:
  def __init__(self, a, b):
    self.a = a
    self.b = b
  @staticmethod
  def f(*args):
    return sum(args)


print(c.f(2, 2))

Выход:

4
...