python学习——第四天

时间:2021-07-21 16:22:42

Python支持多重继承。在类名后面的小括号中,可以列出许多想要的类名,以逗号分隔。

__init__ 在类的实例创建后被立即调用,注意与构造函数的区别,__init__ 方法不返回任何值。

在类中调用一个父类的一个方法时,必须包括 self 参数。但从类的外部调用类方法时,不必对 self 参数指定任何值,Python 会自动增加实例的引用。

每一个类的实例有一个内置属性, __class__,它是对象的类。

要在类的内部引用一个数据属性,使用 self 作为限定符。习惯上,所有的数据属性都在 __init__ 方法中初始化为有意义的值。然而,这并不是必须的,因为数据属性,象局部变量一样,当你首次赋给它值的时候突然产生。

Python没有任何形式的函数重载。每个类只能有一个 __init__ 方法,并且如果一个子类拥有一个 __init__ 方法,它 总是 覆盖父类的 __init__ 方法,甚至子类可以用不同的参数列表来定义它。

在 Java 中,通过使用 str1 == str2 可以决定两个字符串变量是否指向同一块物理内存位置。这就做 对象同一性,在 Python 中写为 str1 is str2。在 Java 中为了比较两个字符串值,要使用str1.equals(str2);在 Python 中,你要使用 str1 == str2

在 Java 中,静态变量和实例变量两者是紧跟在类定义之后定义的。在 Python 中,只有类属性可以定义在这里,数据属性定义在 __init__ 方法中。
eg:
>>> class Counter:
 c=0;
 def __init__(self):
  c += 1;#此处的c是local variable了,不是Counter的静态变量c
 
>>> Counter.c
0
>>> c = Counter.c
>>> c
0
>>> c = Counter()

Traceback (most recent call last):
  File "<pyshell#44>", line 1, in -toplevel-
    c = Counter()
  File "<pyshell#40>", line 4, in __init__
    c += 1;
UnboundLocalError: local variable 'c' referenced before assignment

在 Python 中没有常量

一个 Python 函数,方法,或属性是私有还是公有,完全取决于它的名字。如果一个 Python 函数,类方法,或属性的名字以两个下划线开始(但不是结束),它是私有的;其它所有的都是公有的。 Python 没有类方法 保护 的概念