相关疑难解决方法(0)

如何在 Python 中正确声明实例字段

这可能是一个愚蠢/微不足道的问题,但我对此事感到困惑。

声明实例字段的鼓励(pythonic)方式是什么 - 在构造函数中还是在类体本身中?

class Foo:
    """ Foo class """

    # While we are at it, how to properly document the fields?
    bar = None

    def __init__(self, baz):
        """ Make a Foo """

        self.bar = baz
Run Code Online (Sandbox Code Playgroud)

或者:

class Foo:
    """ Foo class """

    def __init__(self, baz):
        """ Make a Foo """

        self.bar = baz
Run Code Online (Sandbox Code Playgroud)

python coding-style

1
推荐指数
1
解决办法
2228
查看次数

如何在python中实现嵌套对象的递归打印?

我正在尝试学习python,我不知道为什么最后一个语句导致无限递归调用.有人可以解释

class Container:
    tag = 'container'
    children = []

    def add(self,child):
        self.children.append(child)

    def __str__(self):
        result = '<'+self.tag+'>'
        for child in self.children:
            result += str(child)
        result += '<'+self.tag+'/>'
        return result

class SubContainer(Container):
    tag = 'sub'

c = Container()
d = SubContainer()
c.add(d)
print(c)
Run Code Online (Sandbox Code Playgroud)

python recursion inheritance

0
推荐指数
1
解决办法
355
查看次数

在IDLE中调用实例名称时执行操作

所以假设你有这样的事情:

Class Person:
    height = """6' 0"""
Run Code Online (Sandbox Code Playgroud)

Henry = Person
Run Code Online (Sandbox Code Playgroud)

我必须在课堂上定义什么才能Henry获得'6' 0"'而不是像<class __main__.Person 0x00012040>什么?

python python-2.7

0
推荐指数
1
解决办法
37
查看次数

在python中写入文件

我可能会问一个愚蠢的问题.我刚开始学习Python.

我有一个简单的python脚本,它用两个方法定义了一个类:add_coursewrite_to_file:

class School:
    courses=["Math","Physics","Chemical"]

    def __init__(self):
        return

    def add_course(self, course):
        if course not in self.course:
           self.course.append(course)

    def write_to_file():
        course_file = open('courses.csv', 'w+')
        wr = csv.writer(course_file, delimiter='\t')
        writer.writerow(self.courses)

// create a School instance
school = School()

// add course
school.add_course("test")
school.add_course("test2")
school.add_course("test")

// write course to file
school.write_to_file()
Run Code Online (Sandbox Code Playgroud)

我运行上面的脚本,然后,我打开courses.csv文件,我没有看到"test"和"test2",但我可以看到"Math","Physics","Chemical"等课程为什么?

python csv python-2.7 export-to-csv

0
推荐指数
1
解决办法
1094
查看次数

Python对象列表奇怪的行为

我刚开始学习Python并且来自Java/C++背景,并发现以下行为有点令人困惑.在调用s.add_trick("Woof")和d.add_trick("Woof")后,s.tricks和d.tricks都包含["Woof","Bark"].但是,调用party()没有相同的行为.谁能解释一下?

class PartyAnimal:
    x = 0
    name = ''
    tricks = []

    def __init__(self, name):
        self.name = name

    def party(self):
        self.x += 1

    def add_trick(self, trick):
        self.tricks.append(trick)

s = PartyAnimal("Sally")
d = PartyAnimal("Danny")

s.party()
d.party()
s.add_trick("Woof")
d.add_trick("Bark")

print 's', s.name, s.x, s.tricks
print 'd', d.name, d.x, d.tricks
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

s Sally 1 ['Woof', 'Bark']
d Danny 1 ['Woof', 'Bark']
Run Code Online (Sandbox Code Playgroud)

python

0
推荐指数
1
解决办法
81
查看次数

字典和数组作为类与实例变量

这是获得积分的简单方法.请解释以下内容:

class C:
    a = {}
    b = 0
    c = []

    def __init__(self):
        self.x = {}

    def d(self, k, v):
        self.x[k] = v
        self.a[k] = v;
        self.b = v
        self.c.append(v)

    def out(self, k):
        print(self.x[k], self.a[k], self.b, self.c[0])

c = C()
d = C()
c.d(1, 10)
d.d(1, 20)
c.out(1)  
d.out(1)
Run Code Online (Sandbox Code Playgroud)

将输出以下内容:

10 20 10 10
20 20 20 10
Run Code Online (Sandbox Code Playgroud)

为什么字典,列表和"普通"变量的表现各不相同?

编辑:我认为问题很明显,但让我更详细地拼写:

我有一个有三个属性的类,a,b和c.我创建了该类的两个实例.然后我调用一个方法来修改每个实例的这些属性.当我检查属性时,我发现如果一个属性是一个字典,它将在所有实例中共享,而如果它是一个"普通"变量,它的行为就像人们期望的那样,每个实例都是不同的.

python

-1
推荐指数
1
解决办法
1195
查看次数