python是完全面向对象的
p=open('pp.txt','wt')
p.write('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
p.close()
这是我写的写文件代码 。open方法前面怎么没有对应的.类呢?
这不符合面向对象的说法啊。
面向对象不都应该是对象.方法()这种样式的吗
python是完全面向对象的
p=open('pp.txt','wt')
p.write('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa')
p.close()
这是我写的写文件代码 。open方法前面怎么没有对应的.类呢?
这不符合面向对象的说法啊。
面向对象不都应该是对象.方法()这种样式的吗
你可以从这个角度来理解,由于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,
廖雪峰的课程。