笨方法学python习题45(对象、类以及从属关系)

来源:互联网 发布:硕鼠mac版好用吗 编辑:程序博客网 时间:2024/06/08 17:27

习题45

关于泥鳅和鱼:

class和object是同样的东西,在不同时间名字不同而已。

ex:鱼和泥鳅都是鱼,但泥鳅是比较特殊的鱼。

鱼是class,描述具有同类属性的实例的概括性词汇。泥鳅是新的class,具有一些特定的属性。

ex:小方是一条泥鳅,所以他是泥鳅的一个实例instance(泥鳅也是鱼的一个实例)。你使用它做了道菜于是它就成为了对象object。

小方是泥鳅,泥鳅又属于鱼。所以对象属于类,一个类又属于另一个类。

区分class和object

is-a谈论两者以类的关系相互关联。鱼和泥鳅的关系

has-a两者无共同点,仅是互为参照的情况下。泥鳅和鳃的关系



为什么添加object,有什么含义:

小写的object作为一个类,在创建新类时把他继承下来。

class xxx(object)#python 3 中已经默认加上object

在创建class时会继承object方法,拥有除了自己定义的方法之外的一系列操作对象。

若不加object意味着不继承,则新类只有_doc_,_module_和自己定义的方法。


把class当object使用,创建时不新建方法,然后正常调用??不知道有没有理解错误题目意思


*执行函数时一直提示说name "xxx" is not defined。为什么,难道是占位符过多了。单纯从语法看没问题啊。

还是我调用时出了错。。


“是啥”我感觉两方都是类,一个是基类,一个是新类

“有啥”对应的是类里的方法。


多重继承:一个类可以同时继承多个父类的行为和特征功能。可能造成同一功能多次重写,带来维护问题。

class A(object):

class B(A):

class C(A):   
class D(B, C):

通过 super().__init__(self)方法时,A 虽然被继承了两次,但__init__()只调用一次:

python如何实现类的继承:对于每一个定义的类,会有一个方法解析顺序列表(MRO)method resolvation order

print(C.__mro__)得到一个元组。对元组的从左到右依次查找,直到查到待查的属性为止。

当使用super()函数时,python会继续从MRO中的下一个类开始搜索,只要每一个重新定义过的方法(比如init())都使用了super()函数,并且调用了他们一次,那么控制流最终就可以遍历整个MRO列表,并且让每个方法都只被调用一次






原创粉丝点击