Python getter和setters方法

时间:2015-05-24 19:08:45

标签: python python-2.7

我尝试为新功能set_sigma_s指定第三个键,就像我为具有两个键的set_sigma_s一样。一切都是一样的,但这次我得到了一个

  

TypeError:set_sigma_s()只需5个参数(给定4个)。

我的代码如下:

from tabulate import tabulate
class Material():
    def __init__(self, num_mat, num_groups):
        self.num_mat = num_mat                
        self.num_groups = num_groups            
        self.map = {} 

    def sigma_t(self, key1, key2):
            return self.map[key1, key2]

    def set_sigma_t(self, key1, key2, v):
            self.map[key1, key2] = v

    def sigma_s(self, key1, key2, key3):
            return self.map[key1, key2, key3]

    def set_sigma_s(self, key1, key2, key3, v):
            self.map[key1, key2, key3] = v

    def display(self):
            table = [["Number of Materials:", len(num_mat), None],["Number of Groups:", len(num_groups), None],
                     ["Material",num_mat[0], None],["gp",num_groups[0],num_groups[1]],["Total",mat.sigma_t(0, 0), mat.sigma_t(0, 1)],
                     ["0<-gp",mat.set_sigma_s(0, 0, 0),mat.set_sigma_s(0, 0, 1)],["1<-gp",mat.set_sigma_s(0, 1, 0),mat.set_sigma_s(0, 1, 1)]]
            return tabulate(table, tablefmt="rst")

num_mat = [0,1,2]
num_groups = [0,1]

mat = Material(num_mat, num_groups)
mat = Material(3,2)
mat.set_sigma_t(0, 0, 1.0)
mat.set_sigma_t(0, 1, 2.0)

mat.set_sigma_s(0, 0, 0, 1.0)
mat.set_sigma_s(0, 0, 1, 2.0)
mat.set_sigma_s(0, 1, 0, 3.0)
mat.set_sigma_s(0, 1, 1, 4.0)

print mat.sigma_t(0, 0)
print mat.display()

1 个答案:

答案 0 :(得分:4)

display内,您反复拨打mat.set_sigma_s(0, 0, 1)等电话,但set_sigma_s除了self之外还有4个参数。

此外mat指的是您拥有的mat个变量,而不是当前正在操作的对象。相反,您应该在方法中使用self来表示“调用的任何对象display

我对你想要的东西感到困惑,因为你在创建列表时有调用,但set_sigma_s没有返回任何内容。也许您打算调用self.sigma_s(0, 0, 0)来读取值?