类,实例
无参数
class Hero(object):
pass
Garen = Hero()
Garen.name = 'Garen'
即使类中没有对应的属性也可以添加属性
有参数
class Hero(object):
def __init__(self, name, hp):
self.name = name
self.hp = hp
Garen = Hero('garen', 500)
__init__方法的第一个参数永远是self,表示创建的实例本身
有了 __init__ 方法,在创建实例的时候,就不能传入空的参数
数据封装
外部方法
def print_name(obj):
print(obj.name)
print_name(Garen)
内部方法
def print_name(self):
print(self.name)
Garen.print_name()
访问限制
在Python中,实例的变量名如果以__开头,就变成了一个私有变量(private)
class Hero(object):
def __init__(self, name, hp):
self.__name = name
self.hp = hp
Garen = Hero('garen', 500)
print(Garen.hp)
print(Garen.name)
会提示没有这个属性
获取与修改私有属性
def get_name(self):
return self.__name
def set_name(self, name):
self.__name = name
Garen = Hero('garen', 500)
print(Garen.get_name())
Garen.set_name('Garen')
print(Garen.get_name())
继承,多态
继承
Shooter = ADHero('Shooter', 400)
print(Shooter.get_name())
覆写
class ADHero(Hero):
def print_hp(self):
print('my hp is '+str(self.hp))
多态
def print_hp(hero):
hero.print_hp()
print_hp(Shooter)
print_hp(Garen)
要确保传入的对象有print_hp()这个方法
对象信息
使用type()获取对象类型
print(type(Garen))
print(type(Shooter))
很明显这种方法不能获取类之间的继承关系
使用isinstance()
print(isinstance(Shooter, ADHero))
print(isinstance(Shooter, Hero))
使用dir()获取对象的所有属性和方法
print(dir(Garen))
getattr(),setattr()以及hasattr()
print(hasattr(Shooter, 'hp'))
setattr(Shooter, 'hp', 600)
print(getattr(Shooter, 'hp'))