Python 传递_init__参数并将其用作类内的变量
我试图用三个给定的_uinit__;参数调用AWS IoT调用方法。但不知何故,这些参数无法传递到类本身。从给定的屏幕截图中可以看到,在类中找不到变量端点。我们将非常感谢您的帮助 测试.py AWS_Publishing.py 将“端点”传递到“端点”Python 传递_init__参数并将其用作类内的变量,python,python-3.x,Python,Python 3.x,我试图用三个给定的_uinit__;参数调用AWS IoT调用方法。但不知何故,这些参数无法传递到类本身。从给定的屏幕截图中可以看到,在类中找不到变量端点。我们将非常感谢您的帮助 测试.py AWS_Publishing.py 将“端点”传递到“端点” 谢谢你们的帮助。我设法解决了这个问题。我没有创建类,而是创建了一个函数 测试.py AWS_Publishing.py Python区分大小写。您的参数名为endpoint,您分配的变量为endpoint。这是两个不同的变量。此外,您正在导入模块
谢谢你们的帮助。我设法解决了这个问题。我没有创建类,而是创建了一个函数 测试.py AWS_Publishing.py
Python区分大小写。您的参数名为endpoint,您分配的变量为endpoint。这是两个不同的变量。此外,您正在导入模块AWS_Publishing,然后尝试直接调用它。您需要在模块内调用该类。所以AWS_Publishing.AWS_Publishing*args。您正在尝试访问类作用域中的端点。但ENDPOINT是一个实例变量,通过self.ENDPOINT访问。。。你的意思是让你的整个代码缩进到_uinit_;下吗?否则就不太清楚了。我试图在testing.py中调用AWS_PublishingAWEndpoint、AWSClientId和Test,并使用类本身中的参数。例如,AWSEndPoint将用于mqtt_connection_builder.mtls_from_path endpoint=endpoint。。。。我已尝试使用self.ENDPOINT,但它也抛出了一个错误:我添加了一个截图,也许它会更清楚我想要实现什么。谢谢。所有的mqtt_连接=。。。代码在类声明时运行,远远早于您发布AWS_WSEndpoint。。。。您将希望将所有代码缩进类的某个方法中,在实例化该类后调用该类。我喜欢您使用此解决方案,因为Python的新手倾向于使用大量的类。可能是因为在Java中,比如说,一切都是类。。。在Python中,类并不总是必需的——就像您的情况一样。使用函数似乎更合适
import AWS_Publishing
AWSEndPoint = "ak2faelus7i02-ats.iot.ap-southeast-1.amazonaws.com"
AWSClientId = ""
publishMessage = AWS_Publishing(AWSEndPoint, AWSClientId, "Test")
publishMessage
from awscrt import io, mqtt, auth, http
from awsiot import mqtt_connection_builder
import time as t
import json
class AWS_Publishing:
def __init__(self, endpoint, client_id, topic):
self.ENDPOINT = endpoint
self.CLIENT_ID = client_id
self.TOPIC = topic
PATH_TO_CERT = "certs/device.pem.crt"
PATH_TO_KEY = "certs/private.pem.key"
PATH_TO_ROOT = "certs/Amazon-root-CA-1.pem"
MESSAGE = "Hello World"
RANGE = 20
# Spin up resources
event_loop_group = io.EventLoopGroup(1)
host_resolver = io.DefaultHostResolver(event_loop_group)
client_bootstrap = io.ClientBootstrap(event_loop_group, host_resolver)
mqtt_connection = mqtt_connection_builder.mtls_from_path(
endpoint=ENDPOINT,
cert_filepath=PATH_TO_CERT,
pri_key_filepath=PATH_TO_KEY,
client_bootstrap=client_bootstrap,
ca_filepath=PATH_TO_ROOT,
client_id=CLIENT_ID,
clean_session=False,
keep_alive_secs=6
)
import AWS_Publishing
AWSEndPoint = "ak2faelus7i02-ats.iot.ap-southeast-1.amazonaws.com"
AWSClientId = "test"
Topic = "Testing"
publishAWS = AWS_Publishing.publish(AWSEndPoint, AWSClientId, Topic)
publishAWS
from awscrt import io, mqtt, auth, http
from awsiot import mqtt_connection_builder
import time as t
import json
def publish(ENDPOINT, CLIENT_ID, TOPIC):
PATH_TO_CERT = "certs/device.pem.crt"
PATH_TO_KEY = "certs/private.pem.key"
PATH_TO_ROOT = "certs/Amazon-root-CA-1.pem"
MESSAGE = "Hello World"
RANGE = 20
event_loop_group = io.EventLoopGroup(1)
host_resolver = io.DefaultHostResolver(event_loop_group)
client_bootstrap = io.ClientBootstrap(event_loop_group, host_resolver)
mqtt_connection = mqtt_connection_builder.mtls_from_path(
endpoint=ENDPOINT,
cert_filepath=PATH_TO_CERT,
pri_key_filepath=PATH_TO_KEY,
client_bootstrap=client_bootstrap,
ca_filepath=PATH_TO_ROOT,
client_id=CLIENT_ID,
clean_session=False,
keep_alive_secs=6
)
print("Connecting to {} with client ID '{}'...".format(
ENDPOINT, CLIENT_ID))
# Make the connect() call
connect_future = mqtt_connection.connect()
# Future.result() waits until a result is available
connect_future.result()
print("Connected!")
# Publish message to server desired number of times.
print('Begin Publish')
for i in range(RANGE):
data = "{} [{}]".format(MESSAGE, i + 1)
message = {"message": data}
mqtt_connection.publish(topic=TOPIC, payload=json.dumps(
message), qos=mqtt.QoS.AT_LEAST_ONCE)
print("Published: '" + json.dumps(message) +
"' to the topic: " + TOPIC)
t.sleep(0.1)
print('Publish End')
disconnect_future = mqtt_connection.disconnect()
disconnect_future.result()