class Town:
def __init__(self, name: str, country: str, population: int):
#assert len(name) > 1, "The name of the town must be at least two characters long"
self.name = name
self.county = country
self.population = population
@property
def name(self):
return self.__name
@name.setter
def name(self,value):
if len(value) < 2 or len(value) > 50:
raise ValueError("The Name of the town must be between 2 and 50 characters")
self.__name = value
例如,我想限制從外部更改名稱屬性。現在可以使用這個 name.setter。如果我洗掉此設定器,它將按我的意愿作業,但我會丟失我在設定器中所做的驗證。繼續應用我對名稱屬性的驗證但不從外部更改的最佳方法是什么
uj5u.com熱心網友回復:
聽起來您想設定一次名稱,然后使其不可變。因此,請在其中執行此操作__init__
并洗掉 setter:
class Town:
def __init__(self, name: str, country: str, population: int):
if len(name) < 2 or len(name) > 50:
raise ValueError("The Name of the town must be between 2 and 50 characters")
self.__name = name
self.county = country
self.population = population
@property
def name(self):
return self.__name
如果您希望它以某種方式在內部可以修改,請使用私有方法進行設定:
class Town:
def __init__(self, name: str, country: str, population: int):
self.__set_name(name)
self.county = country
self.population = population
def __set_name(self, value):
if len(value) < 2 or len(value) > 50:
raise ValueError("The Name of the town must be between 2 and 50 characters")
self.__name = value
@property
def name(self):
return self.__name
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/478556.html
下一篇:如何創建多個繼承類的實體?