[英]When I call a method inside a class it is not working but it works outside?
[英]Call a function outside any method but inside a class?
我正在嘗試調用函數來初始化我的
全局
類級變量。 請注意,由於某種原因,我無法編寫構造函數來完成這項工作。 (原因:我正在為Tempest寫一個測試用例)
碼:
class my_class(ParentClass):
username = "abc"
password = "123"
hostname = self._get_hostname() # Error: self is undefined
hostname = _get_hostname() # Error: _get_hostname is undefined
def myFunct(self):
...
...
def _get_hostname(self):
...
...
甚至可以在python中使用類函數初始化
全局
類級變量?
注1:我還嘗試在寫入_get_hostname()
函數后執行hostname
初始化,但沒有用。
注2:我可以在一個函數中執行hostname
初始化,例如:
def myFunction(self):
hostname = self._get_hostname()
# do something with hostname
...
但這會破壞使用
全局
類級變量的整個目的。 我想使用類級變量在其他函數中重用 。
第一:它們不是全局變量; 它們是類變量。 (全局變量在模塊范圍內定義。)
如果_get_hostname()
實際上根本不使用 self
,你可以做一些有點粗略的事情:確保在使用它之前定義它,然后用假的第一個參數調用它。
class my_class(ParentClass):
def _get_hostname(self):
...
hostname = _get_hostname(None) # Doesn't matter what
這是有效的,因為當您在class
語句中調用它時,您仍然可以將其視為常規函數。 它必須在使用它之前定義,就像任何函數一樣。
如果它確實需要引用一個對象(或者甚至只是一個類),那么這將不起作用,因為該類還不存在。 您可以做的最好的事情是在class
語句之前定義一個不使用類本身並調用它的函數。 (如果以前的選項可行,你也可以這樣做但是......令人反感。)
def _get_hostname():
...
class my_class(ParentClass):
hostname = _get_hostname()
或者推遲初始化類變量,直到定義了class
。 在這種情況下, _get_hostname
可能應該聲明為靜態方法或類方法,這樣您就不必實例化類來初始化類變量。
class my_class(ParentClass):
@classmethod
def _get_hostname1(cls):
...
@staticmethod
def _get_hostname2():
...
my_class.hostname = my_class._get_hostname1()
my_class.hostname = my_class._get_hostname2()
您不能為尚不存在的實例調用實例方法。 如果您希望它獨立於任何實例,並且您調用的函數不需要實例中的任何信息,則可以使用@staticmethod裝飾器,以便可以靜態調用get hostname。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.