Python应该是有趣,简单且易于学习的。
相反,这是一个巨大的痛苦。我发现我得到的所有错误都与我无关,并未在每个函数中声明每个变量的全局变量。
因此,对于dressUp
的玩具程序,我必须写一下:
hatColor = ""
shirtColor = ""
pantsColor = ""
def pickWardrobe(hat, shirt, pants):
global hatColor
global shirtColor
global pantsColor
...
当我有20个函数时,这真的很烦人,每个函数在开始时需要有20个全局声明。
有什么方法可以避免这种情况吗?
谢谢!
ADDED
我得到了大量的`UnboundLocalError - 在赋值之前引用了局部变量X.
为什么我这样做?因为我需要编写一个py
文件,可以为我做一些计算。我不想在同一个功能中使用它,或者它变得混乱,我无法重用代码。但是,如果我将工作分成几个函数,我必须一遍又一遍地声明这些恼人的全局变量。
答案 0 :(得分:1)
global
对所有
class是一个对象的模板,代表一些东西,在这里它可能是某人打扮的人。
类可能具有类属性,这些属性并不常用,因为它们由所有实例共享(类似于“全局类”)。
一旦实例化,类就会开始生效,这意味着,类定义定义的模式是以唯一对象的形式实现的。
这样一个名为instance的对象可能拥有它自己的属性,这些属性不与其他实例共享。
我有时会想到一个类,因为can-class定义意味着“可以将东西放进去”,而实例是真正有形的,它有一个名称,在Python中我将属性值放入其中,这与给定的持有人的名字绑定。
“holmeswatson”解决方案中的属性与类定义绑定。如果你要使用多个DressUp实例,你会遇到问题,他们会在类定义上共享属性。
将它用作实例变量更好更安全,实例变量超过self
绑定到类的实例,而不是类定义。
修改后的代码:
class DressUp:
def __init__(self, name, hatColor="", shirtColor=""):
self.name = name
self.hatColor = hatColor
self.shirtColor = shirtColor
def pickWardrobe(self,hat, shirt):
self.hatColor = hat
self.shirtColor = shirt
def __repr__(self):
name = self.name
hatColor = self.hatColor
shirtColor = self.shirtColor
templ = "<Person:{name}: hat:{hatColor}, shirt:{shirtColor}>"
return templ.format(name=name, hatColor=hatColor, shirtColor=shirtColor)
tom = DressUp("Tom")
tom.pickWardrobe("red","yellow")
print "tom's hat is", tom.hatColor
print "simple print:", tom
print "__repr__ call:", tom.__repr__()
jane = DressUp("Jane")
jane.pickWardrobe("pink","pink")
print "jane's hat is", jane.hatColor
print "simple print:", jane
print "__repr__ call:", jane.__repr__()
目前使用的是__repr__
方法,您可以拨打print tom
或print jane
。
这里用来表示,如何实例方法可以访问实例属性。
答案 1 :(得分:1)
周围有什么办法吗?是的,有几个。如果您经常使用全局变量,那么您的设计就会出错。
当你有许多函数对一个相同的相关数据进行操作时,一种常见的模式是创建一个类,然后声明该类的实例。每个实例都有自己的一组数据和方法,该实例中的方法可以对该实例中的数据进行操作。
这称为面向对象编程,它是现代编程中常见的基本范例。
一些受访者已经勾勒出了一个类在你的案例中的样子,但我认为你没有提供足够的信息(包括其他功能的方法签名)来实际写出你需要的东西。如果您发布更多信息,可能会得到一些更好的例子。
答案 2 :(得分:-1)
如果合适,可以使用类。
class DressUp:
def __init__(self, name):
self.name = name
def pickWardrobe(self,hat, shirt, pants):
self.hatColor = hat
self.shirtColor = shirt
self.pantsColor = pants
obj1 = DressUp("Tom")
obj1.pickWardrobe("red","yellow","blue")
print obj1.hatColor
看看: http://www.tutorialspoint.com/python/python_classes_objects.htm