类,类对象,对象实例化这个单元让我很懵逼
最近上到了小甲鱼讲的类,类对象,类的实例化,还有魔法方法这一章,说实话整的有点懵逼!下面这是小甲鱼让求的,输入数字按照int()处理,输入字符串则返回ASCII码之和处理
代码1
class NINT(int):
def __new__(self,num):
n=num
if isinstance(n,str):
n=0
for i in range(len(num)):
n+=ord(num)
else: n=int(n)
return n
代码2
class NINT(int):
def __new__(self,num):
self.n=num
if isinstance(num,str):
self.n=0
for i in range(len(num)):
self.n+=ord(num)
else: self.n=int(self.n)
return self.n
问题1:为什么上面不用写成self.n 程序也能用,下面的我是按照self.n来写的。???之前一直强调要用self才行的
哪位同学能不能讲一下,最好能打个比喻讲解一下,因为我对几个关于类的专业术语都是有点懵的状态
问题2:小甲鱼回答了关于 __new__ 方法是负责什么任务,(答:__new__ 方法主要任务时返回一个实例对象,通常是参数 cls 这个类的实例化对象,当然你也可以返回其他对象)
这个答案看着我也没明白,只知道现在怎么去用,能不能稍微通俗地解释一下,谢谢~~ 当你需要实例化对象的时候会先调用__new__,创建并返回实例,具体还是百度吧,说的肯定比我好。
上述程序你实例化的时候调用__new__返回的是一个整型数字,实例化后的对象类型为INT不是NINT了,所以无法调用NINT里的数据(所以n和self.n没什么区别了)
class NINT(int):
def __new__(self,num):
n=num
if isinstance(n,str):
n=0
for i in range(len(num)):
n+=ord(num)
else: n=int(n)
return int.__new__(self,num)
c = NINT(3)
print(c)
print(type(c))
print(c.n)
#输出
3
<class '__main__.NINT'>
Traceback (most recent call last):
File "C:\Users\Jin\Desktop\新建文本文档.py", line 14, in <module>
print(c,c.n)
AttributeError: 'NINT' object has no attribute 'n'
修改__new__后,返回了NINT类对象,想要调用n,要直接使用c,比如 print(c+3),输出为6,无法直接调用c.n
class NINT(int):
def __new__(self,num):
self.n=num
if isinstance(num,str):
self.n=0
for i in range(len(num)):
self.n+=ord(num)
else: self.n=int(self.n)
return int.__new__(self,num)
c = NINT(3)
print(c)
print(type(c))
print(c.n)
#输出
3
<class '__main__.NINT'>
3
写入self后,能通c.n来调用n jinlovelive 发表于 2019-9-5 23:47
当你需要实例化对象的时候会先调用__new__,创建并返回实例,具体还是百度吧,说的肯定比我好。
上述程序你 ...
好像,有点懵懵懂懂地懂了!!!~~~ 学习学习 不太了解
页:
[1]