簡體   English   中英

Python 中的命名常量 class 屬性

[英]Naming constant class attribute in Python

我有一個 class 屬性,該屬性在 class 中是常量,但在其子類或兄弟類中具有不同的值 並且該屬性用於基礎 class 中的方法中。

在這種情況下,我應該將屬性address表示為常量,即使用 SCREAMING_SNAKE_CASE 之類的ADDRESS嗎?

例如,

class BaseClass:
    address = ''

    @classmethod
    def print_address(cls):
        print(cls.address)

class SubClass1(BaseClass):
    address = 'sub1'

class SubClass2(BaseClass):
    address = 'sub2'        

或者,有沒有更好的方法來做同樣的事情?

常量通常在模塊級別定義,並以全大寫字母書寫,並用下划線分隔單詞。 示例包括 MAX_OVERFLOW 和 TOTAL。

因此,如果它是 class 屬性,則在 PEP-8 方面它不被視為常數。

然而,現實世界中很少有例外。

Django 型號的常數

在 Django 文檔的示例中,用於choices字段的常量被封裝到 model 本身中:

class Student(models.Model):
    FRESHMAN = 'FR'
    SOPHOMORE = 'SO'
    JUNIOR = 'JR'
    SENIOR = 'SR'
    GRADUATE = 'GR'
    YEAR_IN_SCHOOL_CHOICES = [
        (FRESHMAN, 'Freshman'),
        (SOPHOMORE, 'Sophomore'),
        (JUNIOR, 'Junior'),
        (SENIOR, 'Senior'),
        (GRADUATE, 'Graduate'),
    ]
    year_in_school = models.CharField(
        max_length=2,
        choices=YEAR_IN_SCHOOL_CHOICES,
        default=FRESHMAN,
    )

來源: Model 字段參考

枚舉

enum.Enum使用 SCREAMING_SNAKE_CASE 作為枚舉值。 例如:

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

來源: enum.Enum 文檔

暫無
暫無

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

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