发现一个问题,如果父类里面的方法需要使用子类的属性,那么父类里面的属性就会报属性未定义,也许不会影响使用,但是总觉得哪里不对,正确的方法应该是什么?如下,父类里面有一个治疗方法,可以治疗生命值,但是父类本身没有生命值和最大生命值的属性,因此在写代码的时候,程序会提示一些错误。
class Warriors:
def healing(self, stone_number): # 父类里面定义一个治疗方法,可以治疗生命值
if self.health == self.max_health:
return
self.health += stone_number
if self.health > self.max_health:# 超过最大生命值,不再加生命值
self.health = self.max_health
class Archers(Warriors):
typename = '弓箭手'
price = 100
max_health = 100
def __init__(self, name, health=max_health):
self.name = name
self.health = health
不用管,运行没问题的
class Warriors:
def healing(self, stone_number): # 父类里面定义一个治疗方法,可以治疗生命值
if self.health == self.max_health:
return
self.health += stone_number
if self.health > self.max_health:# 超过最大生命值,不再加生命值
self.health = self.max_health
class Archers(Warriors):
typename = '弓箭手'
price = 100
max_health = 100
def __init__(self, name, health=max_health):
self.name = name
self.health = health
a = Archers("Tony", 50)
print(a.health) # 50
a.healing(30)
print(a.health) # 80
这里我们会用sklearn
来进行实验,通过查阅了sklearn中文文档
,利用内置的样本的随机生成器生成我们需要的101维的数据
我这里不对生成器做详细解释,具体介绍可以查阅文档,我用的生成器是多标签的生成器
make_multilabel_classification
生成多个标签的随机样本,反映从a mixture of topics(一个混合的主题)中引用a bag of words (一个词袋)。每个文档的主题数是基于泊松分布随机提取的,同时主题本身也是从固定的随机分布中提取的。同样地,单词的数目是基于泊松分布提取的,单词通过多项式被抽取,其中每个主题定义了单词的概率分布。在以下方面真正简化了 bag-of-words mixtures (单词混合包):
首先定义我们的参数
n_samples = 100000 # 100000个数据
n_features = 100 # 100个特征
n_classes = 1 # 分两类 [0 1]两类
MAX_depth = 15 # 递归树最大的深度
接着就开始生成我们的101维的数据
# 生成数据
X,y = make_multilabel_classification(n_samples=n_samples,n_features=n_features,n_classes=n_classes)
X = X%2 # 得到的特征值为0或1
print('X = ', X, X.shape)
print('y = ', y, y.shape)
X = [[0. 0. 0. ... 0. 0. 0.] [1. 0. 0. ... 0. 0. 1.] [1. 0. 0. ... 0. 0. 0.] ... [0. 0. 0. ... 0. 0. 0.] [0. 1. 0. ... 0. 1. 0.] [0. 0. 0. ... 0. 0. 0.]] (100000, 100) y = [[0] [0] [0] ... [1] [0] [1]] (100000, 1)
我们可以看到我们的结果,我们生成了10万个100维的数据,作为我们的X,如何对应的还有10万个1维的数据,对应着我们的y,一个是我们的输入,另一个是我们的输出