如何将示例Python类编写为Java简单bean?
我学习了Python,用这种语言编写类似乎更复杂。我不是什么都懂。Java代码比Pythonmagic方法更长,但更清晰。如何在Python中编写代码类,与下面在Java中编写的代码类最为相似:如何将示例Python类编写为Java简单bean?,java,python,oop,multilingual,Java,Python,Oop,Multilingual,我学习了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)
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没有完全封装,因此不可能创建私有字段,例如,但我正在寻找这种语言的最佳类模式:)如何用这种语言编写最有效的类?私有方法在Python中是按约定的。您可以使用
\u variabe
指示某些内容应被视为私有。使用双下划线(如\uu 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
这允许属性从一个字段更改为一个函数处理的内容,而无需任何访问它的代码进行更改。太棒了!感谢您提供的解决方案:)您是否使用“dict表示法”编辑对象?这看起来很奇怪:)我知道你们并没有创建新的字典,你们只把参数传递给构造函数。您必须知道键名吗?字符串中的大括号
{}
是f字符串表示法。它简化了以字符串形式打印变量的过程。这不是一本字典。打印语句下的行也是它们打印出来的。我之所以在整件事上用大括号括起来,唯一的原因是你在问题中的toString()
示例中就是这样做的。