代码之家  ›  专栏  ›  技术社区  ›  Sprotty

像C一样创建Python类#

  •  0
  • Sprotty  · 技术社区  · 6 年前

    Python是否有任何语法允许您在同一语句中创建类的实例并对其设置属性值

    你可以用C#这样做

    StudentName student2 = new StudentName
    {
        FirstName = "Craig",
        LastName = "Playstead",
    };
    

    3 回复  |  直到 6 年前
        1
  •  6
  •   Sprotty    6 年前

    不是真的。表达这一点的Pythonic方法可能是以下之一。

    普通的老班

    class StudentName:
        def __init__(self, first_name, last_name):
            self.first_name = first_name
            self.last_name = last_name
    
    student2 = StudentName(first_name="Craig", last_name="Playstead")
    

    (您还可以添加 , *, self 要强制用户拼写关键字名称,请参见 Keyword (Named) Arguments in Python

    无名夫妇

    import collections
    StudentName = collections.namedtuple("StudentName", "first_name last_name")
    
    student2 = StudentName(first_name="Craig", last_name="Playstead")
    

    student2[0] 访问 first_name [1] 对于 last_name

    A. dataclass

    import dataclasses
    
    @dataclasses.dataclass
    class StudentName:
        first_name: str
        last_name: str
    
    student2 = StudentName(first_name="Craig", last_name="Playstead")
    

        2
  •  1
  •   Giannis    6 年前
    class StudentName:
        def __init__(self, firstname, lastname):
             self.firstname = firstname
             self.lastname = lastname
    
    
    name = StudentName('firstname', 'lastname')
    

    如果要特别设置构造函数中的哪个属性:

    class StudentName:
        def __init__(self, firstname='', lastname=''):
             self.firstname = firstname
             self.lastname = lastname
    
    
    name = StudentName(firstname='firstname', lastname='lastname')
    

    然后还可以创建一个 StudentName StudentName() . 他的名字和姓氏都是 ''

        3
  •  1
  •   cymruu    6 年前

    可以在中定义默认值 __init__ 构造函数等价的方法

    class Student():
      def __init__(self, firstname, lastname):
        self.firstname = firstname
        self.lastname = lastname
    
      def __str__(self):
         return "My name is {} {}".format(self.firstname, self.lastname)
    
    s1 = Student("John", "Smith")
    print(s1)