这是我参与2022首次更文挑战的第27天,活动详情查看2022首次更文挑战
今天来讲一讲一个比较基础的知识点,众所周知,python中一切皆对象, 不管是类也好,方法也好,都可以当作对象来看,任何对象都可以使用obj.attribute调用属性或者方法,
1.使用 getattr(object, name, default=None) 获取属性
# -*- encoding=utf-8 -*-
class Test:
def __init__(self):
self.name = '莉莉'
self.age = 18
def get_name(self):
print('年龄是:{}'.format(self.name))
return self.name
if __name__ == '__main__':
test = Test()
name = getattr(test, 'name') # 获取属性
print(name)
age = getattr(test, 'age') # 获取属性
print(age)
none = getattr(test, 'none', 'none') # 获取不存在的属性,需要添加 default,否则抛异常
print(none)
new_get_name = getattr(test, 'get_name') # 获取方法
print(new_get_name)
new_get_name() # 调用方法
test.__dict__["name"] = "杰克" # 通过字符串修改类属性
print(test.name)
运行
莉莉
18
none
<bound method Test.get_name of <__main__.Test object at 0x10d87d340>>
年龄是:莉莉
杰克
2.使用__dict__获取属性
# -*- encoding=utf-8 -*-
class Test:
def __init__(self):
self.name = '莉莉'
self.age = 18
if __name__ == '__main__':
test = Test()
name = test.__dict__['name']
print(name)
运行:
莉莉
ps: 如果使用getattr()遇到类属性和方法名是相同时,默认取属性
通过字符串访问类对象类方法修改类对象
dwebsocket
如果使用dwebsockt 可以较为简单快速的使用websocket 问题是需要降django版本(django3.0以下),django3.0不支持使用dwebsocket
websocket
如果想在django3上使用websocket 需要使用官方推荐的channels,同时需要弃用wsgi 使用ASGI应用程序结构,需要重新处理部署流程。
注意:Uvicorn在新版本后[>= 0.12]有关,不会自动提供websocket实现
apache websocket 配置
http.conf文件需要将
LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so 前面的#去掉。
同时如果在apache下使用channels 需要单独运行daphne
websocket 基础配置
websocket需要iis8+windows server2012以上,
服务器:apache v2.2
iis 8.0 windows 8 /windows server2012
nginx v1.3
node.js all
浏览器:chrome4.0 safari5.0.0
ie10