【发布时间】:2021-10-22 23:21:41
【问题描述】:
什么时候应该使用带有 getter/setter 的属性?不使用带有 getter 和 setter 的属性不是 Pythonic 或错误的吗?我应该还是不应该用属性写它?
例子:
class Person:
def __init__(self, firstname, lastname, age):
self.firstname = firstname
self.lastname = lastname
self.age = age
def say_hi(self):
print(f"""Hi i'm {self.firstname} {self.lastname} and i'm {self.age}""")
@property
def age(self):
return self._age
@age.setter
def age(self, newage):
if not isinstance(newage, int):
raise TypeError("Expect an Integer")
self._age = newage
对
class Person2:
def __init__(self, firstname, lastname, age):
self.firstname = firstname
self.lastname = lastname
self.age = age
def say_hi(self):
print(f"""Hi i'm {self.firstname} {self.lastname} and i'm {self.age}""")
def get_age(self):
return self.age
def set_age(self, newage):
if not isinstance(newage, int):
raise TypeError("Expect an Integer")
self.age = newage
【问题讨论】:
-
Python 属性 exist 这样您就不必用
get_age和set_age做笨拙的Java 事情。不要用 Python 编写 Java。在 Java 中,我们必须使用 getter/setter 保护所有字段,因为没有更好的方法。在 Python 中,字段访问和属性访问看起来完全一样,所以我们得到了统一的访问原则和很好的语法。 -
这能回答你的问题吗? Using @property versus getters and setters
标签: python python-3.x oop properties