类中的Python全局变量?
我有一个我的商务类实例列表。我习惯于在类的顶部为类定义变量。在业务类中的一个变量上是标记列表。当我循环浏览企业列表时,有些有标签,有些没有。在20家企业中,列表中的第4个元素有4个标记。将这些标记添加到此业务后,所有以下业务实例也共享这些标记。这是我的商务舱-类中的Python全局变量?,python,class,variables,global,Python,Class,Variables,Global,我有一个我的商务类实例列表。我习惯于在类的顶部为类定义变量。在业务类中的一个变量上是标记列表。当我循环浏览企业列表时,有些有标签,有些没有。在20家企业中,列表中的第4个元素有4个标记。将这些标记添加到此业务后,所有以下业务实例也共享这些标记。这是我的商务舱- from tag import * class Business: name = "" website = "" phone = "" address = "" city = "" sta
from tag import *
class Business:
name = ""
website = ""
phone = ""
address = ""
city = ""
state = ""
postalCode = ""
tags = []
data = {}
def __init__(self, name):
self.setName(name)
# Modifiers
def setName(self, name):
self.name = name
def setWebsite(self, website):
self.website = website
def setPhone(self, phone):
self.phone = phone
def addTag(self, Tag):
self.tags.append(Tag)
def setAddress(self, address):
self.address = address
def setCity(self, city):
self.city = city
def setState(self, state):
self.state = state
def setPostalCode(self, postalCode):
self.postalCode = postalCode
def set(self, key, value):
self.data[key] = value
def unset(self, key):
del self.data[key]
# Accessors
def getWebsite(self):
return self.website
def getName(self):
return self.name
def getPhone(self):
return self.phone
def getTags(self):
return self.tags
def getAddress(self):
return self.address
def getCity(self):
return self.city
def getState(self):
return self.state
def getPostalCode(self):
return self.postalCode
def get(self, key):
return self.data[key]
def getKeys(self):
return self.data.keys()
# Helpers
一个标签被添加到这样的业务中-
if len(categories) > 1:
for cat in categories:
B.addTag(Tag(cat))
在我的业务类顶部定义的变量是否对所有业务实例都是全局的?如何解决此问题?是的,以这种方式分配的可变项对类来说是“全局的”。要使它们“本地”,请将它们定义为实例变量。例如,要对标记执行此操作,请删除现有的全局定义,并在_init__;中添加一行,如:
def __init__(self, name):
self.setName(name)
self.tags = []
这会将标记的值分配给self而不是类。您应该这样做:
from tag import *
class Business:
def __init__(self, name, website='', phone='', address='', city='', state='', postal_code='', tags=None, data=None):
self.name = name
self.website = website
self.phone = phone
self.address = address
self.city = city
self.state = state
self.postal_code = postal_code
self.tags = []
if tags is not None:
for tag in tags:
self.add_tag(tag)
self.data = {} if data is None else data
def add_tag(self, tag):
if not isinstance(tag, Tag):
tag = Tag(tag)
self.tags.append(tag)
def add_data(self, key, value):
self.data[key] = value
def remove_data(self, key):
del self.data[key]
def get_data(self, key):
return self.data[key]
def get_data_keys(self):
return self.data.keys()
Python通常避免使用getter和setter,除非需要一些额外的处理或错误检查这是一个非常常见的问题。请参阅以获得解释。或者,是另一个。这一个:好的,这是有效的。但是什么不使用get和setter方法呢?添加这个抽象层不是一个好习惯吗?