有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何将示例Python类编写为Java简单bean?

我学习了Python,用这种语言编写类似乎更复杂。我不是什么都懂。Java代码比Pythonmagic方法更长,但更清晰。如何在Python中编写与Java中最类似的代码类:

public class Person {
    private String name;
    private String surname;
    private int age;

    public Person(String name, String surname, int age) {
        this.name = name;
        this.surname = surname;
        this.age = age;
    }

    public String getName() { return name; }

    public void setName(String name) { this.name = name; }

    public String getSurname() { return surname; }

    public void setSurname(String surname) { this.surname = surname; }

    public int getAge() { return age; }
    
    public void setAge(int age) {
        this.age = age;
    }

    @java.lang.Override
    public java.lang.String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", surname='" + surname + '\'' +
                ", age=" + age +
                '}';
    }
}

我知道Python没有完全封装,因此不可能创建私有字段,例如,但我正在寻找这种语言的最佳类模式:)如何用这种语言编写最有效的类


共 (1) 个答案

  1. # 1 楼答案

    私有方法在Python中是按约定的。你可以用_variabe来表示某些东西应该被视为私有的。使用双下划线,例如__variable,会损坏名称。该变量仍然可以访问,但它更难,并且由Python解释器强制执行

    通常,Python中不需要getter和setter。你可以把你的课程写成:

    class Person:
    
        def __init__(self, name, surname, age):
            self.name = name
            self.surname = surname
            self.age = age
    
        def __str__(self):
            return f'Person{{name={self.name},surname={self.surname},age={self.age}}}'
    
    
    john = Person('John', 'Smith', 44)
    print(john)
    Person{name=John,surname=Smith,age=44}
    print(john.age)
    44
    

    如果以后需要为设置属性添加功能,可以通过添加@property注释,然后添加getter/setter,将旧的公共变量更改为由属性修改的私有变量:

    class Person:
    
        def __init__(self, name, surname, age):
            self.name = name
            self.surname = surname
            self.age = age
            
        @property
        def name(self):
            return self._name
            
        @name.setter
        def name(self, value):
            self._name = value[0].upper() + value[1:]
            
        def __str__(self):
            return f'Person{{name={self.name},surname={self.surname},age={self.age}}}'
    
    j = Person('john', 'smith', 14)
    print(j)
    Person{name=John,surname=smith,age=14}
    print(j.name)
    John
    

    这允许属性从一个字段更改为由函数处理的内容,而无需任何访问它的代码进行更改