python - 在 Python 中使用 OOP
问题描述
我在 Python 中使用 OOP,并且试图找出一些与继承相关的东西。. 我这里有一些代码,其中包含一些类。一个名为 Blacksmith 的类的行为符合预期,一个名为 Hero 的类我试图从中调用一个函数,但我收到了一个意外的输出。
class Character(object):
def __init__(self,name):
self.health=100
self.name = name
# self.player = player
def printName(self):
print self.name
#def printPlayerName(self):
# print self.player
class Blacksmith(Character):
def __init__(self,name, forgeName):
super(Blacksmith, self).__init__(name)
#self.name = "Billy"
self.forge = Forge(forgeName)
class Hero(Character):
playerName = "Player"
def __init__(self,name):
super(Hero, self).__init__(name)
def setplayername(self,inputplayername):
playerName = inputplayername
class Forge:
def __init__(self,forgeName):
self.name = forgeName
bs = Blacksmith("Billy", "Billy's Forge")
print bs.health
bs.printName()
print bs.forge.name
player1 = Hero("Methos")
print player1.name
player1.setplayername("Chris")
#print playher1.playerName
print player1.playerName
输出是:
raina@DESKTOP-291MTC0 ~/python
$ python learningoopclasses01.py
100
Billy
Billy's Forge
Methos
Player
谁能解释为什么这个输出显示“玩家”而不是“克里斯”。我的另一个问题是我不完全确定init方法是如何工作的。super 在这些情况下会做什么?用 name 值调用 init 究竟做了什么?谢谢。
解决方案
__init__
在创建该类的对象时调用。使用这种方法,我们还将使用self
变量来表示对象本身的实例。它必须在 Python 中显式声明才能在对象上定义。
例如,
class Student():
def __init__(self, score1, score2, score3):
self.scores = [score1, score2, score3]
如果您想为学生 1 分配分数,您只需要使用,因为其中stu_1
已经有score
一个属性:
stu_1 = Student(80, 90, 85)
此外,__init__
如果任何参数输入错误,也会根据设置的内容通知您。
super()
用于首先调用 的父(超)类Blacksmith
,即Character
,并允许您访问Character
的属性。
推荐阅读
- javascript - javascript 寻找一种从对象中获取特定键的方法
- javascript - 使用三元运算符克隆过滤器函数
- javascript - 一个对象字面量在严格模式下不能有多个同名的属性 React Typescript
- compiler-errors - 错误:找不到符号 DebugAppCheckProviderFactory.getInstance());
- python - 搜索所有连接组件时的递归深度问题
- android - Android:有没有办法在没有签名的情况下生成我的应用程序的“.aab”文件?
- mongodb - 临时收集返回计数为零
- ubuntu - 更新 Ubuntu 16.04 后,Freeradius 不起作用
- reactjs - 未捕获(承诺) SyntaxError:JSON 输入意外结束和 403 错误
- c - 将一个数组复制到另一个数组,同时对其进行排序