[英]What is the best way to validate attributes of a class that have many attributes in Python?
[英]What is the best way to change all class attributes that start with a given string?
如果 class 屬性是這樣設置的,並且我想更改所有以 DBT 開頭的屬性,那么有沒有辦法在不單獨顯式使用 setattr 的情況下做到這一點?
class AttrTester():
def __init__(self):
self.DBTname = "dbt name"
self.DBTage = "dbt age"
self.DBTclass = "dbt class"
self.RCCname = "rcc name"
self.RCCage = "rcc age"
self.RCCclass = "rcc class"
def wipe_dbt(self):
setattr(self, "DBTname", "None")
setattr(self, "DBTage", "None")
setattr(self, "DBTclass", "None")
attr = AttrTester()
attr.wipe_dbt()
print(getattr(attr, "DBTname"))
print(getattr(attr, "DBTage"))
print(getattr(attr, "DBTclass"))
來自評論的解決方案
class AttrTester():
def __init__(self):
self.DBTname = "dbt name"
self.DBTage = "dbt age"
self.DBTclass = "dbt class"
self.RCCname = "rcc name"
self.RCCage = "rcc age"
self.RCCclass = "rcc class"
def wipe_dbt(self):
for attrib in dir(self):
if attrib.startswith("DBT"):
setattr(self, attrib, "None")
attr = AttrTester()
attr.wipe_dbt()
print(getattr(attr, "DBTname"))
print(getattr(attr, "DBTage"))
print(getattr(attr, "DBTclass"))
首先,最好正確地說“實例屬性”,因為它們綁定到實例(自身)而不是 class。
我假設您要做的是獲取任何以"DBT"
開頭的實例屬性並將new_value
設置為它。
class AttrTester():
def __init__(self):
self.DBTname = "dbt name"
self.DBTage = "dbt age"
self.DBTclass = "dbt class"
self.RCCname = "rcc name"
self.RCCage = "rcc age"
self.RCCclass = "rcc class"
def wipe_dbt(self, new_value):
for k in self.__dict__:
if k.startswith('DBT'):
self.__dict__[k] = new_value
attr = AttrTester()
attr.wipe_dbt(None)
print(getattr(attr, "DBTname"))
print(getattr(attr, "DBTage"))
print(getattr(attr, "DBTclass"))
這是一種相當通用的方法:
class AttrTester():
def __init__(self):
self.DBTname = "dbt name"
self.DBTage = "dbt age"
self.DBTclass = "dbt class"
self.RCCname = "rcc name"
self.RCCage = "rcc age"
self.RCCclass = "rcc class"
def wipe_attr(self, prefix, value=None):
for name, attr in self.__dict__.items():
if name.startswith(prefix):
setattr(self, name, value)
attr = AttrTester()
attr.wipe_attr('DB')
print(getattr(attr, "DBTname"))
print(getattr(attr, "DBTage"))
print(getattr(attr, "DBTclass"))
如果您願意,也可以將其設為單獨的 function:
class AttrTester():
def __init__(self):
self.DBTname = "dbt name"
self.DBTage = "dbt age"
self.DBTclass = "dbt class"
self.RCCname = "rcc name"
self.RCCage = "rcc age"
self.RCCclass = "rcc class"
def wipe_attr(obj, prefix, value=None):
for name, attr in obj.__dict__.items():
if name.startswith(prefix):
setattr(obj, name, value)
testobj = AttrTester()
wipe_attr(testobj, 'DB')
print(getattr(testobj, "DBTname"))
print(getattr(testobj, "DBTage"))
print(getattr(testobj, "DBTclass"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.