这可能是一个愚蠢/微不足道的问题,但我对此事感到困惑。
声明实例字段的鼓励(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,我不知道为什么最后一个语句导致无限递归调用.有人可以解释
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) 所以假设你有这样的事情:
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脚本,它用两个方法定义了一个类:add_course
和write_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并且来自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) 这是获得积分的简单方法.请解释以下内容:
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.我创建了该类的两个实例.然后我调用一个方法来修改每个实例的这些属性.当我检查属性时,我发现如果一个属性是一个字典,它将在所有实例中共享,而如果它是一个"普通"变量,它的行为就像人们期望的那样,每个实例都是不同的.