请教一下python打印如下这个类方法的返回值,为什么打印不了?报错:name 'get_name' is not defined

代码如下:


```python

import random
import string
class CreateDate(object):
    def get_name(self):
        str_char = ""
        #随机选值的容器:数字、大小写、符号
        get_char = string.ascii_letters + string.digite #+string.punctuation
        #定义随机的6~12位数字
        get_len = random.randint(6,12)
        for i in range(1,get_len+1):
            str_char += random.choice(get_char)
        return str_char
    #获取性别
    def get_sex(self):
        return random.randint(["男","女"])
    #获取年龄
    def get_age(self):
        return random.randint(18,100)
    #获取电话
    
  def get_tel(self):
        get_tel = '131'
        for i in range(8):
            get_tel += str(random.randint(0, 9))
        return get_tel
    #获取邮件
    def get_email(self):
        return self.get_name() + random.randint(["@163.com","@126.com"])

    #声明一个方法,可以使一条数据放在一个列表
    def get_one_data(self):
        #此处返回的数据顺序最好与创建表时的结构顺序一致,以便插入数据时一一对应
        return [self.get_name(),self.get_sex(),self.get_age(),self.get_tel(),self.get_email()]
if __name__ == "__main__":
    print("姓名:",get_name())
    print("性别:",get_sex())
    print("年龄:",get_age())
    print("电话:",get_tel())
    print("邮件:",get_email())

 

打印报错:name 'get_name' is not defined

在你的代码中,get_name() 是一个类方法,因此需要通过实例化 CreateDate 类来调用该方法。
例如


data = CreateDate()
print("姓名:", data.get_name())

同样,其他类方法也需要使用相同的方式调用。例如:

data = CreateDate()
print("性别:", data.get_sex())
print("年龄:", data.get_age())
print("电话:", data.get_tel())
print("邮件:", data.get_email())


这样就能正确地调用类方法并打印出返回值了。

在代码中,您需要使用类方法时,需要在调用方法的前面加上类实例的名称,即“self”,否则Python解释器无法识别该方法。您需要将print语句改为以下方式:


data = CreateDate()  # 创建类实例
print("姓名:", data.get_name())
print("性别:", data.get_sex())
print("年龄:", data.get_age())
print("电话:", data.get_tel())
print("邮件:", data.get_email())


该回答引用ChatGPT

在代码中,get_name()是CreateDate类中的一个实例方法,需要在实例化后才能被调用,否则会报错"NameError: name 'get_name' is not defined"。你可以使用以下代码实例化并调用该方法:


if __name__ == "__main__":
    data_creator = CreateDate()
    print("姓名:", data_creator.get_name())
    print("性别:", data_creator.get_sex())
    print("年龄:", data_creator.get_age())
    print("电话:", data_creator.get_tel())
    print("邮件:", data_creator.get_email())

这样就可以通过实例化对象来调用各个方法,并打印输出其返回值了。

在代码中需要使用 CreateData 类的方法,因此需要创建该类的实例,然后通过实例调用类方法。修改后的代码如下

import random
import string

class CreateData(object):
    def get_name(self):
        str_char = ""
        #随机选值的容器:数字、大小写、符号
        get_char = string.ascii_letters + string.digits #+string.punctuation
        #定义随机的6~12位数字
        get_len = random.randint(6,12)
        for i in range(1,get_len+1):
            str_char += random.choice(get_char)
        return str_char
    #获取性别
    def get_sex(self):
        return random.choice(["男","女"])
    #获取年龄
    def get_age(self):
        return random.randint(18,100)
    #获取电话
    def get_tel(self):
        get_tel = '131'
        for i in range(8):
            get_tel += str(random.randint(0, 9))
        return get_tel
    #获取邮件
    def get_email(self):
        return self.get_name() + random.choice(["@163.com","@126.com"])

    #声明一个方法,可以使一条数据放在一个列表
    def get_one_data(self):
        #此处返回的数据顺序最好与创建表时的结构顺序一致,以便插入数据时一一对应
        return [self.get_name(),self.get_sex(),self.get_age(),self.get_tel(),self.get_email()]

if __name__ == "__main__":
    data = CreateData() # 创建CreateData类的实例
    print("姓名:",data.get_name())
    print("性别:",data.get_sex())
    print("年龄:",data.get_age())
    print("电话:",data.get_tel())
    print("邮件:",data.get_email())

运行结果如下:

姓名: NcYNM2qq
性别: 女
年龄: 26
电话: 13104207039
邮件: mJmfh9t@163.com

get_name不是全局方法,你是放在class里面了,所以是读取不了。
如果要读取,则需要先实例化,实例好再读取即可

方案来自 梦想橡皮擦 狂飙组基于 GPT 编写的 “程秘”


在调用 get_name 等方法时,需要使用实例对象来调用,而不是直接使用方法名调用。因此,你需要首先创建 CreateDate 类的一个实例,然后使用该实例来调用类方法。

例如,你可以创建一个 data 实例,并在其上调用 get_name 方法:

data = CreateDate()
print("姓名:", data.get_name())
  1. 同样的,你也需要使用实例对象来调用 get_sex、get_age、get_tel 和 get_email 方法。