簡體   English   中英

如何在沒有值的情況下在 Python 中聲明屬性?

[英]How do I declare an attribute in Python without a value?

在 C# 中,我會去:

string UserName;
string Password;

但是現在,在 Python 中:

class User:
    UserName
    Password

我收到未定義UserName的錯誤。 我可以不聲明沒有變量的變量嗎?

在 Python 和許多其他語言中,有一個值表示“沒有值”。 在 Python 中,該值為None 所以你可以做這樣的事情:

class User:
   username = None
   password = None

那些聽起來確實像實例變量,而不是類變量,所以可以這樣做:

class User(object):
    def __init__(self):
        self.username = None
        self.password = None

請注意 Python 如何不時隱式分配None值:

def f():
    pass
g = f() # g now has the value of None

首先,你應該像這樣重寫:

class User(object):
  def __init__(self, username, password):
    self.username = username
    self.password = password

這樣, username 和 password 是實例變量而不是類變量(在您的示例中,它們是類變量——所有實例變量都需要在__init__定義為self屬性)。 然后,您可以User您想要的任何用戶名和密碼初始化User ,如果您真的希望它們沒有任何價值,則包括None

在您的代碼中:

class User:
    UserName
    Password

UserNamePassword被解析為表達式。 由於此時尚未分配它們,因此您會收到NameError

在 Python 中,變量必須先用賦值語句定義,然后才能在表達式中使用,否則會出現 NameError。 請注意,這里的“之前”是指“執行順序”,而不是“源代碼順序”。 還有更多內容(導入語句、全局變量、命名空間技巧),​​但讓我們在這里保持簡單。

定義“沒有值”的變量的慣用方法是為其分配值None

此外,您的代碼看起來確實需要實例成員,而不是類成員。 一些靜態分析工具(如pylint認可的慣用方法是:

class User(object):
    def __init__(self):
        self.username = None
        self.password = None

此外,從“對象”派生所有類也是很好的 Python 風格,因此您可以使用新式類,並使用 lowercase_with_underscore 或 initialLowerWithCaps 約定命名實例變量。 InitialCaps 樣式非常普遍地保留給類名。

你不能。 在 Python 中,“變量”只是名稱。 名稱始終指向(“綁定”)一個對象。 將尚未具有合理值但應該存在的名稱分配給None是慣例。

你可能也對我在這里的回答感興趣。

python 3.7+的數據類

@dataclass
class User:
    UserName: str
    Password: str

只需分配None的值:

self.username = None

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM