我只是在学习Python,而且我来自C语言,所以如果我之间有任何混淆/混淆,请告诉我。
假设我有以下课程:
class Node(object):
def __init__(self, element):
self.element = element
self.left = self.right = None
@classmethod
def tree(cls, element, left, right):
node = cls(element)
node.left = left
node.right = right
return node
这是一个名为的类Node
,该类会使构造函数重载,以便在需要时能够处理不同的参数。
是什么定义之间的差异self.element
在__init__
只(如上图所示),而不是执行以下操作:
class Node(object):
element, left, right = None
def __init__(self, element):
self.element = element
self.left = self.right = None
是不是self.element
在__init__
相同类的element
变量定义?难道不只是覆盖element
从传递到None
的element
值__init__
?
一个是类属性,而另一个是实例属性。它们是不同的,但是它们之间的紧密联系使它们有时看起来相同。
它与python查找属性的方式有关。有一个层次结构。在简单的情况下,可能看起来像这样:
instance -> Subclass -> Superclass -> object (built-in type)
当您寻找这样的属性时instance
…
`instance.val`
…实际发生的是, 首先
,Pythonval
在实例本身中进行查找。然后,如果找不到val
,它将在其类中查找Subclass
。然后,如果它没有找到val
那里,它看起来的父母Subclass
,Superclass
。这意味着当您这样做时…
>>> class Foo():
foovar = 10
def __init__(self, val):
self.selfvar = val
…所有Foo
share 实例foovar
,但有各自不同selfvar
的。这是一个简单的具体示例:
>>> f = Foo(5)
>>> f.foovar
10
>>> Foo.foovar
10
如果我们不碰foovar
,则f
和都相同Foo
。但是,如果我们改变f.foovar
…
>>> f.foovar = 5
>>> f.foovar
5
>>> Foo.foovar
10
…我们添加了一个有效遮罩的值的实例属性Foo.foovar
。现在,如果我们Foo.foovar
直接进行更改,则不会影响我们的foo
实例:
>>> Foo.foovar = 7
>>> f.foovar
5
但这确实会影响一个新foo
实例:
>>> Foo(5).foovar
7
还请记住,可变对象增加了另一层间接寻址(正如mgilson提醒我的那样)。在这里,与f.foovar
指代相同的对象Foo.foovar
,因此当您更改对象时,更改将沿层次结构传播:
>>> Foo.foovar = [1]
>>> f = Foo(5)
>>> f.foovar[0] = 99
>>> Foo.foovar
[99]
问题内容: 我最近刚与Python中的一个错误作斗争。那是那些愚蠢的新手错误之一,但是它让我思考了Python的机制(我是C ++的老程序员,是Python的新手)。我将列出错误的代码并解释如何解决该问题,然后我有两个问题。 场景:我有一个叫做A的类,它有一个字典数据成员,下面是其代码(当然这是简化的): 使用此代码的类为B类: 请注意,每次调用都会初始化类A的新“干净”实例,并在添加前后打印字典
本文向大家介绍Python 实现子类获取父类的类成员方法,包括了Python 实现子类获取父类的类成员方法的使用技巧和注意事项,需要的朋友参考一下 大家好,今天在写代码的时候,遇到了这样一种情况。我有如下所示的几个类用来存放程序配置(其实当做命名空间来用,同时感觉能够继承方便一点), 然后我在子类中想要访问父类的类成员变量,而且这两个类都是只有类成员变量。感觉目前我使用的方法笨一点,就是直接引用父
本文向大家介绍Python 关于反射和类的特殊成员方法,包括了Python 关于反射和类的特殊成员方法的使用技巧和注意事项,需要的朋友参考一下 反射 反射即想到4个内置函数分别为:getattr、hasattr、setattr、delattr 获取成员、检查成员、设置成员、删除成员 dir([obj]): 调用这个方法将返回包含obj大多数属性名的列表(会有一些特殊的属性不包含在内)。obj的默
本文向大家介绍Python程序从类的对象形成字典,包括了Python程序从类的对象形成字典的使用技巧和注意事项,需要的朋友参考一下 当需要在对象和类的帮助下形成字典时,将定义一个类。定义了一个“ init”函数,该函数将值分配给变量。创建该类的实例,并调用init函数。 示例 以下是相同的演示- 输出结果 解释 定义了一个“ base_class”,并将一个对象传递给它。 定义了一个“ init”
本文向大家介绍python 对类的成员函数开启线程的方法,包括了python 对类的成员函数开启线程的方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇python 对类的成员函数开启线程的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。
类的每个对象有自己的所有数据成员的副本,有时类的所有对象应共享变量的一个副本,因此可以使用 static 类变量。stattic 类变量表示的是类范围中所有对象共享的信息。static 类成员的声明以 static 关键字开始。 下面用一个视频游戏的例子说明 static 类共享数据的作用。假设视频游戏中有 Martian 和其他太空人。每个 Martian 都很勇敢,只要有5个 Martian