Pet*_*ter 1 python oop static-methods static-variables
[更新]:完整代码
我总是对 pyhton 的静态方法感到困惑,但根据这个(最后一个答案),它应该可以工作!
得到错误:
AttributeError: 类 MyConnection 没有属性“myuser”
class MyConnection:
def __init__(self, hostname, port, user, password):
myhostname = hostname
myport = port
myuser = user
mypassword = password
isisessid = None
@staticmethod
def connect():
my_session = MyConnection()
headers = {'content-type': 'application/json'}
headers['Authorization'] = 'Basic ' + string.strip(
base64.encodestring(MyConnection.myuser + ':' + MyConnection.mypassword))
body = json.dumps({'username': MyConnection.myuser, 'password': MyConnection.mypassword,
'services': ['platform', 'namespace']})
uri = '/session/1/session'
connection = httplib.HTTPSConnection(MyConnection.myhostname, MyConnection.myport)
connection.connect()
try:
connection.request('POST', uri, body, headers)
response = connection.getresponse()
my_session.isisessid = MyConnection.extract_session_id(
response.getheaders())
except Exception, e:
print e
connection.close()
except httplib.BadStatusLine, e:
print e
connection.close()
return my_session
Run Code Online (Sandbox Code Playgroud)
如果属性将是静态的,不要在初始化方法中初始化它们,而是在类级别之外声明它们,而不是在方法级别。
但是为什么要在初始化程序中初始化类属性?您创建的每个实例都将覆盖它们的值!
我相信您对实例属性和类属性的用途感到困惑。为什么不尝试仅使用实例属性?考虑到所有因素,拥有静态数据并不是一个好主意。例如:
class MyConnection:
def __init__(self, hostname, port, user, password):
self.myhostname = hostname
self.myport = port
self.myuser = user
self.mypassword = password
@staticmethod
def connect():
my_session = MyConnection()
print my_session.myuser # just an example
Run Code Online (Sandbox Code Playgroud)