【问题标题】:Python set optional variablePython设置可选变量
【发布时间】:2020-08-20 21:12:42
【问题描述】:

对于 User 类,您可以传递 first_name 或 last_name 但不能同时为空来实例化用户。如何为它定义一个类

class User:

    def __init__(self, fn=None, ln=None):
        self.fn = fn
        self.ln = ln

    def get_name(self):
        name = self.fn + self.ln
        if not name:
            return 'either first name or last name should be present'
        return name

它仍然允许我们实例化没有名字或姓氏的用户有没有办法让 User 对象仅在 first_name 或 last_name 存在时才实例化

【问题讨论】:

  • 你必须自己处理__init__中的逻辑,比如if not fn and not ln: raise ValueError("must provide at least one name")

标签: python python-3.x class init


【解决方案1】:

你可以试试这个:

class Validations:
    @staticmethod
    def check_user_params(first_name, last_name):
        if not first_name or not last_name:
            raise ValueError("Must provide at least one name")


class User(Validations):
    def __init__(self, first_name, last_name):
        self.check_user_params(first_name, last_name)
        self.first_name = first_name
        self.last_name = last_name

    def get_name(self):
        return f"{self.first_name} {self.last_name}"


if __name__ == "__main__":
    user_test= User("", "lastNameTest")

【讨论】:

    【解决方案2】:

    你可以试试这个。

    class User:
        def __init__(self, fn='', ln=''):
            if not fn and not ln:
                raise ValueError("must provide at least one name")
            self.fn = fn
            self.ln = ln
    
        @property
        def name(self):
            return self.fn + self.ln
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-28
      • 2015-01-20
      • 2013-07-13
      • 1970-01-01
      • 2011-08-09
      • 2017-07-17
      相关资源
      最近更新 更多