Python 继承 (OOP)

Posted

技术标签:

【中文标题】Python 继承 (OOP)【英文标题】:Python inheritance (OOP) 【发布时间】:2018-05-21 08:56:10 【问题描述】:

我想创建 python 类时间的继承者(descadent)。我使用下一个脚本求解,但我得到消息 cannot create "builtin_function_or method" instance。请问哪里有问题?

from time import time as time
import _classA

class UserTime(time):
    def __init__(self):
        pass

【问题讨论】:

Error when calling the metaclass bases: function() argument 1 must be code, not str的可能重复 【参考方案1】:

time.time 是一个函数而不是一个类。您不能从函数继承。在模块时间struct_time被定义为一个类。

from time import struct_time as time

class MyTime(time) :
    def __init__(self, time_as_sequence) :
        time.__init__(self, time_as_sequence)

        # Do what you like

【讨论】:

【参考方案2】:

基于the Python docs for time.time,您导入的time 是一个函数,而不是一个类,这就是您收到该错误消息的原因。

datetime.time 可能是您需要的。

【讨论】:

【参考方案3】:

实际上你想要做的是非法的 :) 无论如何,您正在尝试子类化您不能做的上课时间的方法。 这里有一点解释为什么:

>>> import time
>>> type(time.time)
<class 'builtin_function_or_method'>
>>> type(time)
<class 'module'>

从上面你可以看到 time.time 是一个类的内置函数或方法(在这种情况下,类“time”),即使你在“time”本身上强制转换类型,也会产生一个类类型为“模块”,您也不能对其进行子类化。 但是,你可以做一些我不推荐的事情,因为它没用(在我看来):

import time
class A(type(time)):
    pass

它会神奇地成为“类型”类型的类,这是您想要的并回答您的问题。

>>> type(A)
<class 'type'>

但是您必须以某种方式处理它,所以我的问题是,您实际上想要完成什么?您真的需要在幕后对可以以不同方式(轻松)完成的事情施展魔法吗?

【讨论】:

以上是关于Python 继承 (OOP)的主要内容,如果未能解决你的问题,请参考以下文章

python 学习笔记 -- OOP在实例中学习继承(inheritance)和组合(composition)

python类的继承

python基本知识:面向对象,继承

24 Python - 面向对象编程OOP

Python OOP-3

oop思维意识,类 模块命名空间,类扩展之继承 组合mixin三种模式