类不能使用变量

时间:2018-08-24 06:50:37

标签: python class

我的代码是这样的:

filter { it }

但是,当我先执行size = 50 class cube: def setsize(sizechoice): size = sizechoice 然后执行cube.setsize(200)时,它表示50而不是200。不知道是什么问题,我是python的新手,我刚刚学习了类的工作原理,所以希望您能救救我!

4 个答案:

答案 0 :(得分:1)

我知道您真的是Python新手。花点时间去研究python类tutorial

因为您是新手,所以我写了简单的代码,应该对您有用。使用类,您总是会初始化类,并获得一个对象。

size = 50  # Does not influence the class

class cube:  # Class name

    def __init__(self, size): # Initialization
        self.size = size      # Sets the size of cube

    def setSize(self, sizechoice):  # Set method (sets size of cube)
        self.size = sizechoice

    def getSize(self):              # Get method (gets size of cube)
        return self.size

c = cube(200) # Creation of object cube with size of 200

print(c.getSize())  # Gets the cube size and prints it out

我希望这会有所帮助:)

祝以后编程好运。

答案 1 :(得分:1)

您需要将大小设置为类或实例属性。 要设置类或实例属性,您需要执行以下操作:

class cube:

    def __init__(self):
        self.size = 0

    def setsize(self, sizechoice):
        self.size = sizechoice

因此,您必须使用__init__关键字在self.方法内设置类或实例属性。

现在您可以执行以下操作:

cube = cube()
cube.setsize(200)
print(cube.size)

,它将显示200。

我建议将类名更改为Cube(C上的字母)

答案 2 :(得分:1)

size = 50

size是全局变量;它只有一个实例,并且在整个模块中都是相同的。

class cube:
    def setsize(sizechoice):
        size = sizechoice

这里size指的是局部变量,也称为size,它遮蔽(或隐藏)全局变量。这是因为Python假定如果您在函数内部并分配给变量而没有明确地说出您引用了全局变量,则您想使用该名称创建本地变量。所以,按原样

c = cube() 
c.setsize(100)
print(size) 
print(c.size)

第一个print会得到50(因为全局size不会受到影响),第二个会出错(因为您没有创建任何名为size)。

现在,如果要显式引用全局size,则必须执行以下操作:

class cube:
    def setsize(sizechoice):
        global size
        size = sizechoice

如果可以的话

c = cube() 
c.setsize(100)
print(size)

它将打印100;但这很可能不是您想要的:通常期望实例方法影响实例特定的属性,而不是全局变量-IOW,在此实现中,所有多维数据集都将具有相同的大小!

c = cube() 
d = cube() 
c.setsize(100)
print(size) # prints 100
d.setsize(200)
print(size) # prints 200
# why did I even bother creating two instances? 

您可能希望为每个多维数据集指定一个size;为此,您必须谨慎地引用self.size,因为在Python中没有“隐式this”规则(例如Java,C#,C ++等)。您可能还想提供一种在构造上进行设置的简便方法,因此您应该这样做:

class cube:
    def __init__(self, size):
        self.size = size

    def setsize(self, size):
        self.size = size

并摆脱现在无用的全局size

c = cube(100)
d = cube(200)
print(c.size) # 100
print(d.size) # 200
d.setsize(300)
print(c.size) # 100
print(d.size) # 300

最后,您甚至可以摆脱setsize设置器:在直接分配给size成员时,它没有添加任何有用的东西,并且如果您以后想在分配时添加验证逻辑,则可以可以随时将size更改为属性。

答案 3 :(得分:0)

欢迎来到S.O. @pytusiast。问题是您要在该函数中本地设置大小,而在其他任何地方,该值都是以前的值。

您可以将size定义为global变量:

class cube:
    def setsize(sizechoice):
        global size
        size = sizechoice

但是我不确定这是最好的方法,因为size现在是全局变量。