czh1303541051 发表于 2020-4-18 16:54:58

Python定义类的问题

class Turtle:
    def __init__(self,x):
      self.num = x

class Fish:
    def __init__(self,x):
      self.num = x

class Pool:
    def __init__(self,x,y):
      self.turtle = Turtle(x)
      self.fish = Fish(y)

    def print_num(self):
      print("乌龟 % 只,小鱼 % 条!"%(self.turtle.num,self.fish.num))




p = Pool(1,10)
>>> p.print_num()
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
    p.print_num()
File "C:\Users\Avein\Desktop\1.py", line 15, in print_num
    print("乌龟 % 只,小鱼 % 条!"%(self.turtle.num,self.fish.num))
ValueError: unsupported format character '?' (0x53ea) at index 5


调用出这个问题,这是小甲鱼39讲里头我照着打的,应该没打错,但不出结果,可以先不管这个,重要的问题是定义类累的时候,里面函数的参数中那个self到底是什么,然后就是定义类的时候类是没有参数这一说的,那么调用类的时候括号中的参数是怎么来的,麻烦各位大佬解释一下原理

qiuyouzhi 发表于 2020-4-18 16:58:54

self是实例,调用实例的变量就要加self。

悠悠2264 发表于 2020-4-18 17:00:16

第15行代码应该是%d,改成:
print("乌龟 %d 只,小鱼 %d 条!"%(self.turtle.num,self.fish.num))

jkluoling1992 发表于 2020-4-18 17:04:49

self 类似于指针this,它可以指向类的成员变量。
初始化需要什么参数,就看__init__ ()括号里面定义了几个参数,self不算在内啊

zltzlt 发表于 2020-4-18 17:08:36

格式化的时候应该是 %d,不是单单一个 %,应该这样写:

class Turtle:
    def __init__(self,x):
      self.num = x

class Fish:
    def __init__(self,x):
      self.num = x

class Pool:
    def __init__(self,x,y):
      self.turtle = Turtle(x)
      self.fish = Fish(y)

    def print_num(self):
      print("乌龟 % 只,小鱼 % 条!"%(self.turtle.num,self.fish.num))


self 就是类的实例,通过实例访问方法时实例会自动将自己传递进去,不用手动传递。

czh1303541051 发表于 2020-4-18 17:14:52

jkluoling1992 发表于 2020-4-18 17:04
self 类似于指针this,它可以指向类的成员变量。
初始化需要什么参数,就看__init__ ()括号里面定义了几 ...

可以兄弟,我有其他语言的基础,这样一说觉得明白了

jkluoling1992 发表于 2020-4-18 17:30:15

czh1303541051 发表于 2020-4-18 17:14
可以兄弟,我有其他语言的基础,这样一说觉得明白了

哈哈哈,明白就好了
页: [1]
查看完整版本: Python定义类的问题