我在执行时(ctrl + B)在sublime text3中编写了以下python脚本,但未给出任何结果。
步骤1: 代码:
class Avengers(object):
def __init__(self):
print('hello')
avenger1 = Avengers()
avenger1.__init__(self)
第2步:
ctrl + B
第3步:
结果:
Repl已关闭
答案 0 :(得分:2)
那是因为您只声明一个类,而不实例化它。 您的变量avenger1存在于 init 函数中,因此不会被调用。缩进在python中很重要。
尝试一下:
class Avengers(object):
def __init__(self):
print('hello')
if __name__ == "__main__":
avenger1 = Avengers()
答案 1 :(得分:1)
您没有实例化该类。尝试类似的东西:
<script>
data = [{
name: "A",
value: 1,
value2: 2
}, {
name: "B",
value: 4,
value2: 5
}, {
name: "C",
value: 7,
value2: 9
}, {
name: "D",
value: 2,
value2: 7
}, {
name: "E",
value: 1,
value2: 1
}, {
name: "F",
value: 5,
value2: 2
}]
var margin = {
top: 35,
right: 20,
bottom: 20,
left: 30
},
width = 580 - margin.left - margin.right,
height = 260 - margin.top - margin.bottom;
var x = d3.scaleLinear()
.range([0, width])
var y = d3.scaleBand()
.rangeRound([0, height])
.padding(.3)
var xAxis = d3.axisTop(x);
// gridlines in x axis function
function make_x_gridlines() {
return d3.axisBottom(x)
.ticks(40)
}
var svg = d3.select("#barchart").append("svg")
.attr("width", 585)
.attr("height", 270)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")");
x.domain([-10, 10])
y.domain(data.map(function (d) {
return d.name;
}));
svg.selectAll(".bar")
.data(data)
.enter().append("rect")
.attr("class", "bar")
.attr("x", function (d) {
return x(Math.min(0, d.value));
})
.attr("y", function (d) {
return y(d.name);
})
.attr("width", function (d) {
return Math.abs(x(d.value) - x(0));
})
.attr("height", 13);
svg.selectAll(".bar2")
.data(data)
.enter().append("rect")
.attr("class", "bar2")
.attr("x", function (d) {
return x(Math.min(0, -d.value2));
})
.attr("y", function (d) {
return y(d.name);
})
.attr("width", function (d) {
return Math.abs(x(-d.value2) - x(0));
})
.attr("height", 13);
//svg.append("g")
// .attr("class", "x axis")
// .attr('transform', 'translate(0,' + (height) + ')')
// .call(xAxis);
svg.append("g")
.attr("transform", "translate(0," + height + ")")
.call(d3.axisBottom(x));
// add the X gridlines
svg.append("g")
.attr("class", "grid")
.attr("transform", "translate(0," + height + ")")
.call(make_x_gridlines()
.tickSize(-height)
.tickFormat("")
)
svg.append("g")
.call(d3.axisLeft(y));
//svg.append("g")
// .attr("class", "y axis")
// .append("line")
// .attr("x1", x(0))
// .attr("x2", x(0))
// .attr("y2", height);
function type(d) {
d.value = +d.value;
return d;
}
</script>
实例化此类时,它将为该类执行class Avengers(object):
def __init__(self):
print('hello')
avenger1 = Avengers()
avenger1.__init__(self)
avengers = Avengers() # Initiates the class
函数。
答案 2 :(得分:0)
首先,让我修复代码
class Avengers(object):
def __init__(self):
print('hello')
avenger1 = Avengers()
avenger1.init(self)
好的,在这里您创建了一个名为“复仇者联盟”的类。为什么它不产生任何东西?因为您永远不会初始化该类(创建对象)。
所以我们开始:
class Avengers(object):
def __init__(self):
print('hello')
avenger1 = Avengers()
avenger1.init(self)
Avengers()
它将打印问候,但是,它是递归的。永不结束打印“你好”。因为每次初始化该类时,它都会一次又一次创建一个对象。 init 是特殊功能,因此,每次初始化类时,都会执行 init 函数。
也许您想要的是这样的
class Avengers(object):
def __init__(self):
print('hello')
Avengers()
您可以阅读的其他参考:https://www.sololearn.com/Play/Python
答案 3 :(得分:0)
先前的答案是正确的,但也请注意,其构造函数中的Avengers类正在初始化Avengers的另一个实例。
这意味着在创建“复仇者联盟”对象时,它正在创建另一个“复仇者联盟”对象,该对象正在创建另一个“复仇者联盟”对象,依此类推。
__init__
函数陷入无限递归。
class Avengers(object):
def __init__(self):
print('hello')
avenger1 = Avengers() # this line triggers infinite recursion
avenger1.__init__(self)
avengers = Avengers() # Initiates the class