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 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题