如何从 python 中的另一个模块调用 setter

how to call setter from another module in python

我是 Python 的新手,我想从另一个模块调用 getter

menu.py

class settings(object):
    def __init__(self):
        self.fbType=None

    @property
    def fbType(self):
        return self.fbType
    @fbType.setter
    def fbType(self, value):
        self.fbType = value

def main():
    print(20 * '-')
    print('   M E N U')
    print(30 * '-')
    print('1. page')
    print('2. event')
    print(20 * '-')

    choice = input('Enter your choice [1-5] : ')
    choice = int(choice)

    if choice == 1:
        fbType = 'page'
    elif choice == 2:
        fbType = 'event'
    else:
        print('seleccion incorrecta')


if __name__ == '__main__':
    main()

fb.py

import menu
from menu import settings

def main():
    menu.main()
    m = settings()
    l1 = fb.data(m.fbType(), 'python', 1)
    print(l1)

if __name__ == '__main__':
    main()

给我的错误如下

File "C:\Users\gabri\PycharmProjects\borrar\menu.py", line 10, in fbType
self.fbType = value
[Previous line repeated 493 more times]

拜托,你能帮我解决这个错误吗?提前致谢

修复您的代码:

class settings(object):
    def __init__(self):
        self._fbType = None

    @property
    def fbType(self):
        return self._fbType

    @fbType.setter
    def fbType(self, value):
        self._fbType = value

否则/!\无限循环,这里:

class settings(object):
    def __init__(self):
        self.fbType = None

    @property
    def fbType(self):
        return self.fbType

    @fbType.setter
    def fbType(self, value):
        self.fbType = value

m = settings()
m.fbType = 1

输出:

RecursionError: maximum recursion depth exceeded

你调用def fbType(self, value)是一个无限循环,self.fbType = value再次调用setter....一次又一次...

做:

m.fbType # not m.fbType() to get
m.fbType = 1 # not m.fbType(1) to set

getter和setter中的这些python只用于治疗前后 getter 或 setter(或者通过 fbType 重命名属性 _fbType)。

你可以做到:

class settings(object):
    def __init__(self):
        self._fbType = None

    @property
    def fbType(self):
        print('get fbType:', self._fbType)
        return self._fbType

    @fbType.setter
    def fbType(self, value):
        print('set fbType:', self._fbType, 'to', value)
        self._fbType = value

m = settings()
m.fbType = 1
m.fbType

输出:

set fbType: None to 1
get fbType: 1