在类中存储变量的最佳Python方法

时间:2019-09-25 22:31:34

标签: python

这里有4种不同的变量存储方式。从易于阅读的角度来看,我试图查看哪种方式是最Python化的方式。

也许创建一个外部文件并将所有变量放在其中可能会有所帮助?我不太在乎人们是否能够将这些变量访问其他文件。变量将仅用于此类。


在方法内部定义变量。

class Cat(object):
    def __init__(self, color, breed, age):
        self.color = color
        self.breed = breed
        self.age = age

    def is_old_cat(self):
        OLD_AGE = 15

        if self.age > OLD_AGE:
            return True

        return False

    def is_young_cat(self):
        YOUNG_AGE = 5

        if self.age < YOUNG_AGE:
            return True

        return False

    def is_medium_young(self):
        LOW_MEDIUM_AGE = 8
        HIGH_MEDIUM_AGE = 12

        if LOW_MEDIUM_AGE < self.age < HIGH_MEDIUM_AGE:
            return True

        return False

在班上。

class Cat(object):
    OLD_AGE = 15
    YOUNG_AGE = 5
    LOW_MEDIUM_AGE = 8
    HIGH_MEDIUM_AGE = 12

    def __init__(self, color, breed, age):
        self.color = color
        self.breed = breed
        self.age = age

    def is_old_cat(self):
        if self.age > self.AGES['OLD_AGE']:
            return True

        return False

    def is_young_cat(self):
        if self.age < self.AGES['YOUNG_AGE']:
            return True

        return False

    def is_medium_young(self):
        if self.AGES['LOW_MEDIUM_AGE'] < self.age < self.AGES['HIGH_MEDIUM_AGE']:
            return True

        return False

在课堂之外。

OLD_AGE = 15
YOUNG_AGE = 5
LOW_MEDIUM_AGE = 8
HIGH_MEDIUM_AGE = 12


class Cat(object):
    def __init__(self, color, breed, age):
        self.color = color
        self.breed = breed
        self.age = age

    def is_old_cat(self):
        if self.age > AGES['OLD_AGE']:
            return True

        return False

    def is_young_cat(self):
        if self.age < AGES['YOUNG_AGE']:
            return True

        return False

    def is_medium_young(self):
        if AGES['LOW_MEDIUM_AGE'] < self.age < AGES['HIGH_MEDIUM_AGE']:
            return True

        return False

在另一个班级里。

class Ages:
    OLD_AGE = 15
    YOUNG_AGE = 5
    LOW_MEDIUM_AGE = 8
    HIGH_MEDIUM_AGE = 12


class Cat(object):
    def __init__(self, color, breed, age):
        self.color = color
        self.breed = breed
        self.age = age

    def is_old_cat(self):
        if self.age > Ages.OLD_AGE:
            return True

        return False

    def is_young_cat(self):
        if self.age < Ages.YOUNG_AGE:
            return True

        return False

    def is_medium_young(self):
        if Ages.LOW_MEDIUM_AGE < self.age < Ages.HIGH_MEDIUM_AGE:
            return True

        return False

2 个答案:

答案 0 :(得分:1)

有两种方法可以让我看到最多的东西……它们是最Python化的吗?不能确定,因此我将保留真正的python忍者,而不对此大胆声明。

如果这些值是特定于猫的,则可以避免使用。

class Cat(object):
    OLD_AGE = 15
    YOUNG_AGE = 5
    LOW_MEDIUM_AGE = 8
    HIGH_MEDIUM_AGE = 12

    def __init__(self, color, breed, age):
        self.color = color
        self.breed = breed
        self.age = age

    def is_old_cat(self):
        if self.age > self.OLD_AGE:
            return True

        return False

另一种方法是使您可以在Cat类之外的地方重用一个枚举。许多人会说这是更好的方法。

但是,如果您确实选择使用枚举,那么如果您有一个Human类,可能想弄清楚猫的年龄是15岁,而不是人类的年龄,可能会造成混淆。

from enum import IntEnum
class Age(IntEnum):
    OLD = 15
    YOUNG = 5
    LOW_MEDIUM = 8
    HIGH_MEDIUM = 12

print(Age.OLD) # 15
print(Age.YOUNG) # 5

答案 1 :(得分:1)

如果仅在此文件中使用枚举,请将它们放在同一文件中。否则,将它们移至其他文件。