定义python类时,如何在其中设置随机变量? [英] When defining a python class, how to set a random variable in it?

查看:507
本文介绍了定义python类时,如何在其中设置随机变量?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

说我有一个名为Person的课程,该课程仅包含该人的姓名和性别.

Say I have a class called Person, which will have only the person's name and gender.

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

The gender should be randomly selected from Male and Female. To do that, I import the random.randint() function. The random gender is determined according to the random 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)

但是,我从该班不同的人那里得到的结果都具有相同的性别.我的理解是randint一旦生成便是固定的.我的问题是如何使每个类实例与众不同.

However, the result I get for different person from this class all have the same gender. My understanding is the randint is fixed once been generated. My question is how to make it different for each class instance.

推荐答案

您从未获得过不同的性别的原因是,性别属性是一个 class 变量.一旦Python创建了类对象Person,就不再计算gender的值.您需要将gender变量设置为 instance 属性.这意味着性别将基于实例而不是每个类定义进行计算.例如:

The reason your never getting a different gender is because the gender attribute is a class variable. Once Python creates your class object Person, the value of gender is never computed again. You need to make the gender variable an instance attribute. That means the gender will be computed on a per instance basis, instead of per class definition. eg:

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() 从性别(男性或女性)列表中选择随机性别:

On a side note, I think a much better choice for your task would be to use random.choice() to select a random gender from a list of genders(male or female):

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 一个类变量.这是故意的.因为我们只需要创建一次性别列表 ,我们就可以使该列表成为类级别的变量.

Notice in my example above, Person.genders is a class variable. This is on purpose. Because we only need to create a list of genders once, we can make the list a class level variable.

这篇关于定义python类时,如何在其中设置随机变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆