定义python类时,如何在其中设置随机变量? [英] When defining a python class, how to set a random variable in it?
问题描述
说我有一个名为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屋!