python - 在定义一个python类时,如何在其中设置一个随机变量?

标签 python class random

假设我有一个名为 Person 的类,其中只有人的姓名和性别。

性别应从男性和女性中随机选择。为此,我导入了 random.randint() 函数。根据随机int确定随机性别。

import random

class Person:
    alias = random.randint(1, 3)
    if alias == 2:
        gender = 'Male'
    else:
        gender = 'Female'

    def __init__(self, name):
        self.name = name

r = Person('rachel')
s = Person('Stanky')
print(r.gender)
print(s.gender)

但是,我从这个类(class)的不同人得到的结果都具有相同的性别。我的理解是 randint 一旦生成就固定了。我的问题是如何使每个类实例都不同。

最佳答案

你永远不会得到不同性别的原因是因为性别属性是一个变量。一旦 Python 创建了你的类对象 Persongender 的值就不会再计算了。您需要将 gender 变量设为 instance 属性。这意味着性别将在每个实例的基础上计算,而不是每个类定义。例如:

import random

class Person:
  def __init__(self, name):
      self.name = name
      alias= random.randint(1, 3)
      if alias == 2:
          self.gender = 'Male'
      else:
          self.gender = 'Female'

r= Person('rachel')
s= Person('Stanky')

print(r.gender) 
print(s.gender)

哪些输出

Female
Male

附带说明一下,我认为您的任务更好的选择是使用 random.choice()从性别列表中选择一个随机性别(男性或女性):

from random import choice

class Person:
  genders = ('Male', 'Female', 'Female')
  def __init__(self, name):
      self.name = name
      self.gender = choice(Person.genders)

rachel = Person('Rachel')
stanky = Person('Stanky')

print(rachel.gender) 
print(stanky.gender)

请注意,在我上面的示例中,Person.genders 是一个类变量。这是故意的。因为我们只需要创建一个性别列表一次,所以我们可以将该列表设为类级别变量。

关于python - 在定义一个python类时,如何在其中设置一个随机变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43991548/

相关文章:

python - Django 迁移——是否可以在项目中间使用 South?

matlab - 如何在matlab中调用另一个m文件中的类的成员函数?

algorithm - 生成随机非奇异整数矩阵

sql - 如何获取随机未读文章?

python - 在 Debian 操作系统上使用 pandas 从 github 存储库读取 csv 文件时出现奇怪的 csv 输出

python - 聚类经纬度gps数据

python - PyQt 显示来自 opencv 的视频流

c++ - setter 和 getter/类

python - 为什么这个简单的 Tkinter 代码会创建两个顶级窗口?

c++ - 计算 C++ 的随机数