qq_43412960 2019-11-14 21:08 采纳率: 78.6%
浏览 352
已采纳

这是一个关于python面向对象的问题

python是完全面向对象的

p=open('pp.txt','wt')
p.write('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
p.close()

这是我写的写文件代码 。open方法前面怎么没有对应的.类呢?
这不符合面向对象的说法啊。
面向对象不都应该是对象.方法()这种样式的吗

  • 写回答

3条回答 默认 最新

  • 家在田塍 2019-11-14 23:18
    关注

    你可以从这个角度来理解,由于python是动态类型语言,很多不同的类class,
    只要这些类有同一种方法,那么就可以定义一个统一的函数,这个函数的参数
    可以是某一个类,函数里面调用这个类的方法,那么其他所有包括这个方法的
    类,都适用于这个函数。举例来说明:

    # 定义一个类animal,有一个eat()方法
    class animal(object):
    
        def eat(self):
            print('我是吃肉长大的')
    
    # 定义一个animal类的子类bird,自然而然继承了eat()这个方法,还扩展了一个fly()方法
    class bird(animal):
    
        def fly(self):
            print('我会飞')
    
    # 定义一个新的类person,与animal这个类无关,但是都有eat()这个方法
    class person(object):     
    
        def eat(self):
            print('我不是一般的动物,我啥都吃')
    
    # 现在我们定义一个函数,这个函数是针对animal这个类定义的,即参数为animal
    # 然后在函数里调用animal的eat()方法,共三次。
    def multi_eat(animal):
        animal.eat()
        animal.eat()
        animal.eat()
    
    
    bird1 = bird()  # 实例化bird,为bird1对象
    p1=person()   # 实例化person,为p1对象
    bird1.eat()   # bird1调用eat()
    bird1.fly()   # bird1调用fly()
    multi_eat(bird1)  #  这个函数虽然针对animal定义的,但是仍然可以对bird1使用
    multi_eat(p1)  #  更奇妙的是,这个函数也可以对p1进行使用。
    
    #下面是打印的结果:
    # 我是吃肉长大的
    # 我会飞
    # 我是吃肉长大的
    # 我是吃肉长大的
    # 我是吃肉长大的
    # 我不是一般的动物,我啥都吃
    # 我不是一般的动物,我啥都吃
    # 我不是一般的动物,我啥都吃
    

    结论:正是因为python这种动态类型语言,才实现了将《不同对象.同一方法》这种功能
    打包到一个函数中,使得一个函数可以实现《不同对象.同一方法》这种功能,这比java等
    静态类型的语言更加方便。所以说题主这里的问题,与python是否是完全面向对象没啥关系,
    动态类型特征才是关键。好了,现在,回头看看python的语法中,有很多函数是这么实现的,
    譬如repr(),str(),format(),都是通过object基类下的__repr()__,__str__,__format__,重新
    定义了一个函数,进而统一实现了不同对象的同一种方法的调用。像print(),input()应该
    与系统sys.stdout以及sys.stdin等对象的方法有关,而open()这种的与io.TextIOWrapper对象
    的方法有关,具体实现方式题主可以研究一下,我也在学习中。希望这个回答能对你有所启发,
    我也不能保证全都准确无误。
    参考:https://www.liaoxuefeng.com/wiki/1016959663602400/1017497232674368,
    廖雪峰的课程。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?