类,实例

无参数

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'))

Last modification:July 12th, 2020 at 01:10 am