__İnit__function içinde İç içe Değişkenleri Alma
Kod:
sınıf GmailFarming (tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
def StartSeleniumScript():
with open("json/Gmail_farming/Tasks/Tasks.json", "r") as f:
tasksJsonFile = json.load(f)
for task in tasksJsonFile['tasks']:
if task['id'] == 1:
#Get info Needed from json
mode_chosen_to_run = task['mode_chosen']
account_chosen_to_run = task['account_chosen']
#Get account info from selected account
with open("json/Gmail_farming/Profiles/Profiles.json", "r") as acc:
accountsJsonFile = json.load(acc)
for account in accountsJsonFile['accounts']:
if account['id'] == 1:
email_for_account_to_run = account['email']
password_for_account_to_run = account['password']
Tamam, bu kod yığınına sahibim ve temelde yapmaya çalıştığım şey, email_for_account_to_run ve password_for_account_to_run (en alt satırlarda) değerlerini almak. Bunu yapmakta zorlanıyorum. Bu değerleri başka bir dosyadan almaya çalışıyorum, ancak Python'da biraz yeniyim ve hala bunun gibi konular hakkında kafam karışık. Bu değerlerin GmailFarming sınıfının hemen hemen dışından nasıl alınacağına dair her türlü yardım harika olurdu! Şimdiden teşekkürler ve PS, sınıfın neden kod bloğunda görünmediğini, ancak sınıfın olduğunu ve ardından def init'in altına girintili olduğunu anlayın!
Yanıtlar
Kodunuzu okumak, ne yapmaya çalışıyoruz bir sahip bir sınıf oluşturarak olduğunu varsayalım __init__yardımcı bir işlev tanımlar yöntemle StartSeleniumScriptiki değişkenleri bildirmek hangi email_for_account_to_runve password_for_account_to_runhangi dışarıda sınıfın değerlerini kurtarmak istiyorum.
En azından kodunuzu kafa karıştırıcı buluyorum çünkü:
- nesne yönelimli stil programlamayı işlevsel stille karıştırırsınız (bunun yerine
startSeleniumScript(self),__init__bir işlev tanımını içine yerleştirmek yerine , yöntemle aynı düzeyde yardımcı bir yöntem oluşturmuş olabilirsiniz) - oluşturduğunuz iç içe geçmiş işlev asla çağrılmaz
- oluşturduğunuz iç içe geçmiş işlevin
returndeğeri yok - sınıfın
__init__yöntemde bildirilmiş bir örnek değişkeni yok - asla sınıfın bir örneğini yaratmazsın
Bütün bunlar tam olarak ne yapmak istediğiniz konusunda beni biraz şaşırttı ama bunun gibi bir şey işe yarayacak:
class GmailFarming:
def __init__(self, parent, controller):
def StartSeleniumScript():
self.foo = 1
self.bar = 2
StartSeleniumScript()
g = GmailFarming(None,None)
print(g.foo)
print(g.bar)
Temelde, self.erişmek istediğiniz değişkenlerin önüne bir eklersiniz, böylece dışarıdan erişebileceğiniz örnek değişkenler olurlar. Ve elbette, örnek değişkenlerini ondan çıkarabilmeniz için önce sınıfın bir nesnesini oluşturmanız gerekir.
Kişisel olarak, iç içe geçmiş işlevi bunun gibi bir yardımcı yöntem olarak tanımlardım, ancak:
class GmailFarming:
def __init__(self, parent, controller):
self.__startSeleniumScript()
def __startSeleniumScript(self):
self.foo = 1
self.bar = 2
g = GmailFarming(None,None)
print(g.foo)
print(g.bar)