我想訪問用一個類定義的變數值,但我嘗試的一切都會導致一種或另一種錯誤。
我將包含 Python 代碼的摘錄,它定義了從 DS3231 實時時鐘讀取和顯示日期、時間和日期的類:
class ds3231(object):
weekday = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
address = 0x68
start_reg = 0x00
alarm1_reg = 0x07
control_reg = 0x0e
status_reg = 0x0f
def __init__(self,i2c_port,i2c_scl,i2c_sda):
self.bus = I2C(i2c_port,scl=Pin(i2c_scl),sda=Pin(i2c_sda))
def read_time(self):
t = self.bus.readfrom_mem(int(self.address),int(self.start_reg),7)
sec = t[0]&0x7F #second
min = t[1]&0x7F #minute
hrs = t[2]&0x3F #hour
wek = t[3]&0x07 #week
day = t[4]&0x3F #day
mon = t[5]&0x1F #month
yer = t[6]&0x3F #year
print("%s x:x:x x/x/20%x" %(self.weekday[wek-1],hrs,min,sec,day,mon,yer))
剩下的代碼如下:
rtc = ds3231(I2C_PORT,I2C_SCL,I2C_SDA)
while True:
rtc.read_time()
sleep(3)
輸出是:
Monday 12:23:09 07/11/2022
但是,我想做的是訪問類之外的變數,以便我可以對可用資料做更多的事情,例如:
print ('The year is ' yer)
但這會導致:
NameError: name 'yer' isn't defined
進一步的研究表明,我需要指定類和變數,我推斷如下:
print ('The year is ' (read_time.yer))
但這會導致:
NameError: name 'read_time' isn't defined
我嘗試了很多不同的變體,包括嘗試將值作為字串讀入另一個變數,然后嘗試輸出,如下所示:
ryear = str(ds3231.yer())
print (rdate)
但這會導致:
AttributeError: type object 'ds3231' has no attribute 'yer'
正是在這一點上,我意識到我需要幫助,我真的希望有人能引導我朝著正確的方向前進。
我感謝您的幫助。
uj5u.com熱心網友回復:
在從類中讀取變數之前,在這種情況下是屬性,您必須宣告并初始化它。
您絕對可以read_time通過添加self關鍵字在您的函式中執行此操作:
class ds3231:
...
def read_time(self):
t = self.bus.readfrom_mem(int(self.address), int(self.start_reg), 7)
self.sec = t[0] & 0x7F # second
self.min = t[1] & 0x7F # minute
self.hrs = t[2] & 0x3F # hour
self.wek = t[3] & 0x07 # week
self.day = t[4] & 0x3F # day
self.mon = t[5] & 0x1F # month
self.yer = t[6] & 0x3F # year
print("%s x:x:x x/x/20%x" %
(self.weekday[self.wek-1], self.hrs, self.min, self.sec, self.day, self.mon, self.yer))
要在函式之外使用這些屬性,您必須與 insatntiated 類一起處理它。但在這種情況下,您首先必須至少呼叫一次該函式。
rtc = ds3231(I2C_PORT, I2C_SCL, I2C_SDA)
rtc.read_time()
ryear = str(rtc.yer)
print (ryear)
此外,屬性并不像函式那樣被呼叫,所以沒有()after yer。
你在那里的命名有一點錯誤:
ryear = str(ds3231.yer())
print (rdate)
這里rdate沒有定義,你已經ryear在上面的行中使用了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/528355.html
上一篇:如何使用智能指標存盤
