鱼C论坛

 找回密码
 立即注册
查看: 928|回复: 11

[已解决]萌新求助!!

[复制链接]
发表于 2018-3-21 12:36:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
问题一:刚刚学到python面向对象编程这里,想问一下在引用定义好的类的时候,python的写法跟c++的做法是不是不一样?(我感觉是,但还是很蒙蔽,希望大佬帮我再系统梳理一下)
问题二:比如说我定义两个类classA和classB,A,B不是继承关系,A定义在B的前面,当我写到类B的时候里面的某个方法可能会要用到类A的方法,这个要这么写?(python里貌似没友元这个机制吧。。。。),另外,是不是python的类定义跟函数定义一样是不受定义先后顺序限制的?
最佳答案
2018-3-21 13:01:59
问题一:逻辑上一样的,格式有点区别,c++用#include将类定义文件进行引用,而python用import载入文件

问题二:只用实例化类A的对象,去调用这个函数;只要是平级的,顺序都无关
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-21 13:01:59 | 显示全部楼层    本楼为最佳答案   
问题一:逻辑上一样的,格式有点区别,c++用#include将类定义文件进行引用,而python用import载入文件

问题二:只用实例化类A的对象,去调用这个函数;只要是平级的,顺序都无关
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-21 13:05:30 | 显示全部楼层
直接说二吧。
类B里要用类A的方法,直接A().fun()  就 ok 了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-21 13:33:16 From FishC Mobile | 显示全部楼层
python就是比c++少了个new关键字
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-21 13:34:51 | 显示全部楼层
BngThea 发表于 2018-3-21 13:01
问题一:逻辑上一样的,格式有点区别,c++用#include将类定义文件进行引用,而python用import载入文件

...

那小甲鱼所说的类对象,类的实例化对象,类这个是怎么回事?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-21 13:52:58 | 显示全部楼层
土间埋 发表于 2018-3-21 13:34
那小甲鱼所说的类对象,类的实例化对象,类这个是怎么回事?

python中一切皆对象,一个类本身也是元类的实例化对象,简称类对象
类的实例化对象,和c++中的实例化对象一致
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-21 14:05:06 | 显示全部楼层
BngThea 发表于 2018-3-21 13:01
问题一:逻辑上一样的,格式有点区别,c++用#include将类定义文件进行引用,而python用import载入文件

...

追问一下,python里的类对象引用不是要先要a=类名(),然后再a.方法,但c++里不是直接类名.方法吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-21 14:30:56 | 显示全部楼层
土间埋 发表于 2018-3-21 14:05
追问一下,python里的类对象引用不是要先要a=类名(),然后再a.方法,但c++里不是直接类名.方法吗?

c++中没有直接类名.方法的形式,也是实例化对象后调用方法的,或者这样
类名::方法 这种一般很少见,python中倒是可以直接类名.方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-21 14:46:15 | 显示全部楼层
BngThea 发表于 2018-3-21 14:30
c++中没有直接类名.方法的形式,也是实例化对象后调用方法的,或者这样
类名::方法 这种一般很少见,pyt ...

>>> class A:
        def printf(self):
                print("qp")

               
>>> A.printf()
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    A.printf()
TypeError: printf() missing 1 required positional argument: 'self'
>>>

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-21 14:46:53 | 显示全部楼层
土间埋 发表于 2018-3-21 14:46
>>> class A:
        def printf(self):
                print("qp")

不对啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-21 14:50:20 | 显示全部楼层
不加self的话倒是对了,加了self就不行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-21 16:18:40 | 显示全部楼层
土间埋 发表于 2018-3-21 14:46
>>> class A:
        def printf(self):
                print("qp")

不能加self,加了的函数必须实例化对象才能调用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 17:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表