python - 面向对象基础(类,对象,查询顺序,组合)

一.面向对象

1. 类:具有相同属性和技能的一类事物

2.对象:具体的类的表现,具体的实实在在的一个实例

    1. 猫是一类,谁家养的猫是一个对象

二.类的应用与操作

1.类的创建

class Person:  # 通过class创建一个类,类名首字母大写

2.类名的角度

  1.操作类的静态变量

class Person:  # 创建一个类,类名首字母大写
    mind = '思想'  # 定义一个变量,静态变量,静态字段
    faith = '信仰'
    def __init__(self):
        print('今天又是充满元气的一天')

    def work(self):  # 方法,函数,动态变量
        print('新的一天')
# 类名.__dict__ 查询类中所有内容。(不能进行增删改操作)
print(Person.__dict__) 
# 类名.__dict__['静态变量'] 查询静态变量的内容。(不推荐)
print(Person.__dict__['mind'])
# 万能的 . 对类中的单个变量进行增删改查操作
Person.money = '600'    #
del Person.faith        #
Person.mind = '思维'    #
print(Person.mind)      #
print(Person.__dict__)

  2.操作类的方法

Person.work('传一个参数') # 调用方法 (不推荐)

3.对象的创建

Person()    # 类名+()实例化的过程,创建一个对象的过程(也叫对象空间)
        # 只要 类名+(),就会自动执行类中的__init__方法

4.对象的角度

  1.操作对象中的静态变量

    __dict__查询对象中所有的内容

    万能的 . 进行增删改查

    对象操作类中的静态变量,只能进行查询

    def __init__(self,name,age,hobby):
        self.name = name
        self.age = age
        self.hobby = hobby  # 给对象空间封装属性
p1 = Person('alex','26','篮球')   
p1.sex = ''    #
del p1.hobby    #
p1.age = 18     #
print(p1.name)  #
print(p1.__dict__)  # 查对象空间中所有内容
# 输出结果{'name': 'alex', 'age': 18, 'sex': '女'}
#1. 类名+()产生一个实例(对象,对象空间)
#2. 自动执行__init__方法,将对像空间传给参数self
#3. 给对象封装对应的属性

  2. 对象调用方法

p1.work()

二.查询顺序

  1.对象.属性 : 先从对象空间找,再从类名空间找,再从父类找

  2.类名.属性 : 先从类名空间找,再从父类找

  3.对象与对象之间是相互独立的

三.组合

# 组合:给一个类的对象封装一个属性,这个属性又是另一个类的对象
class GameRole:

    def __init__(self, name, ad, ph):
        self.name = name
        self.ad = ad
        self.ph = ph

    def attack(self, role):
        role.ph = role.ph - self.ad
        print('%s 攻击了 %s,打了%s血,还剩%s血' % (self.name, role.name, self.ad, role2.ph))

    def Weapon_attributes(self,wea):
        self.wea = wea

class Weapon:
    def __init__(self, name, ad):
        self.name = name
        self.ad = ad

    def fight(self, role1, role2):
        role2.ph = role2.ph - self.ad

        print('%s 拿 %s 攻击了 %s,打了%s血,还剩%s血' % (role1.name, self.name, role2.name, self.ad, role2.ph))
        if role2.ph == 0:
            print('%s死掉了' % role2.name)

role1 = GameRole('阿狸', 60, 500)
role2 = GameRole('卡特琳娜', 80, 700)
axe = Weapon('开天斧',500)
broadsword = Weapon('青龙偃月刀',300)
axe.fight(role2,role1)
role1.Weapon_attributes(broadsword)
print(role1.__dict__)
role1.wea.fight(role1,role2)
role1.wea.fight(role1,role2)

猜你喜欢

转载自www.cnblogs.com/jiujiang/p/11184351.html