Как получить доступ к МЕТОДАМ класса в статических/классовых методах?

` класс A (объект): x = 0

def say_hi(self):
    pass

@staticmethod
def say_hi_static():
    pass

@classmethod
def say_hi_class(cls):
    pass

def run_self(self):
    self.x += 1
    print(self.x) # outputs 1
    self.say_hi()
    self.say_hi_static()
    self.say_hi_class()

@staticmethod
def run_static():
    print(A.x)  # outputs 0
    # A.say_hi() #  wrong
    A.say_hi_static()
    A.say_hi_class()

@classmethod
def run_class(cls):
    print (cls.x)# outputs 0
    # cls.say_hi() #  wrong
    cls.say_hi_static()
    cls.say_hi_class()

`

A.run_static() 0

A.run_class() 0 a=A()

а.run_class() 0

а.run_static() 0

Вышеприведенный код объясняет, как получить доступ к переменной класса в статических методах и методах класса... Что делать, если я хочу получить доступ к переменной методов в статических методах и методах класса


person Abhishek    schedule 27.03.2017    source источник
comment
Вы не можете. Вы путаете аспекты классов (с которыми связаны методы, доступ к которым можно получить с помощью точечного синтаксиса) и функций (внутренние функции которых буквально принадлежат им). Однако я думаю, что у вас нет причин вкладывать mysub внутрь myadd здесь. Что ты пытаешься сделать?   -  person Andrew Jaffe    schedule 27.03.2017
comment
Почему у вас есть mysub вложенный?   -  person Moses Koledoye    schedule 27.03.2017
comment
Я почти уверен, что это похоже на то, как работают локальные переменные. Функция mysub определена только для функции myadd и существует только там.   -  person AsheKetchum    schedule 27.03.2017
comment
Вы используете метод возвращаемого значения, поэтому в вашем случае это int   -  person Take_Care_    schedule 27.03.2017
comment
Возможный дубликат Доступ к функции внутри функции (вложенной функции?)   -  person Take_Care_    schedule 27.03.2017
comment
Пожалуйста, используйте синтаксис уценки.   -  person Andrew Jaffe    schedule 27.03.2017
comment
Извините, буду использовать уценку в следующий раз   -  person Abhishek    schedule 27.03.2017


Ответы (1)


Возможно, вы захотите определить функцию mysub как статический метод, чтобы может использовать его как "независимую" функцию:

class Myclass1(object):
    def __init__(self,d):#, dict_value):
        self.d=d
    def myadd(self):
        b=2
        return b

    @staticmethod
    def mysub(u):  #Note that self is not an argument!
        a=u
        print('A value:',a)
        return a     


Instance=Myclass1(1)    # Created an instance
Instance.mysub(1)

# ('A value:', 1)
# Out[42]: 1
person FLab    schedule 27.03.2017