python类与对象

例子:#对象 张飞 男 18 初始战斗力 1000
#对象 吕布 男 20 初始战斗力 21000
#对象 曹操张飞 男 1918 初始战斗力 251000
#场景
# 草丛战斗 消耗 200 战斗力
# 自我修炼 增长100战斗力
# 多人对战 消耗 500战斗力
# 1.类===》人类 (属性:name gender age fight)
# 方法 草丛战斗 grassfand
#      自我修炼  practice
#      多人对战 incest
# 2.对象(从类模板 取出具体的事物)
# 3.调用方法
class person:
    #构造函数 ===>专门为产生对象服务,不用显式调用,而是通过类名隐式调用
    def __init__(self,na,gen,age,fig):
#小括号中是构造函数的形参,只有self后的变量才代表属性
#问什么时候有实参,在构造对象的时候传递实参
        self.name=na
        self.gender=gen
        self.age=age
        self.fight=fig
        print(self.name,"产生了")

    def grassland(self):
        self.fight-=200
    def practice(self):
        self.fight+=100
    def incest(self):
        self.fight-=500
#封装一个方法=>查看对象的属性值
    def info(self):
       # print("姓名,性别,年龄,战斗力",self.name,self.gender,self.age,self.fight)
        #扩展----变量和常量混合输出 ==>占位符号 %s准备输出一个字符串  %d准备输出一个整数  %f代表小数
       #占位符号%(变量)--对应关系
        print("姓名:%s,性别%s,年龄%d,战斗力%d"%(self.name,self.gender,self.age,self.fight))
#构造对象===》具体的事物
zhang = person("张飞",'男',18,1000)
lv = person("吕布", '男', 20, 2000)
cao = person("曹操", '男', 19, 2500)
zhang.info()
lv.info()
cao.info()
print("==========玩游戏中===========")
zhang.incest()
lv.practice()
zhang.grassland()
zhang.incest()
lv.practice()
zhang.grassland()
print("==========玩游戏结束===========")
zhang.info()
lv.info()
cao.info()

面向对象设计代码(脚本思路)====》封装继承多态

需求 人类(个人信息属性一般不公开 name age grade),选择部分属性公开(name.age),选择属性不公开(grade)

解决:使用面向对象的封装特征,可以将类中的属性封闭起来,不让任意访问

(python属性私有化语法:在类中属性前面加上两个下划线)

总结封装 1.对象属性私有化 属性上加上两个下划线

2.部分属性可以访问 对属性增加set get方法

继承--面向对象的特征:

例子:动物类(姓名 睡觉 吼叫)

猫类 狗类 猴子类==》子类满足使用(继承)动物类特征

1.类的继承 子类是指在现有类的基础上 构造出新的类

2.子类可以使用父类的属性和方法(私有属性除外)

3.优点:增强代码的复用性

格式Class子类(父类)

#父类
class Animal:
    def __init__(self,name):
        self.name=name
    def sleep(self):
        print(self.name,"在睡觉")
    def shout(self):
        print(self.name,"在大叫")
#子类
class cat(Animal):
    pass
#子类2
class dog(Animal):
    pass
#子类3
class monkey(Animal):
    pass
#实例化
cc=cat("波斯猫")
print("猫的名字",cc.name)
cc.sleep()
cc.shout()
dd=dog("哈士奇")
print("狗的名字",dd.name)
dd.sleep()
dd.shout()
mm=monkey("金丝猴波斯猫")
print("hou的名字",mm.name)
mm.sleep()
mm.shout()

问题==》吼叫 猫 够 猴子 一致了(强调个性)父类强调共性

解决==》对需要实现个性的代码 在子类中重新编写(重写 使用子类里面的方法覆盖父类中的方法+子类中方法的名字和父类中方法的名字是一致的)

#父类
class Animal:
    def __init__(self,name):
        self.name=name
    def sleep(self):
        print(self.name,"在睡觉")
    def shout(self):
        print(self.name,"在大叫")
#子类
class cat(Animal):
    def shout(self):
        print(self.name,"miaomiao")
    def eatfish(self):
        print(self.name,"在吃鱼")
#子类2
class dog(Animal):
    def shout(self):
        print(self.name,"wangwang")
#子类3
class monkey(Animal):
    def shout(self):
        print(self.name,"zhazha")
#实例化
cc=cat("波斯猫")
print("猫的名字",cc.name)
cc.sleep()
cc.shout()
dd=dog("哈士奇")
print("狗的名字",dd.name)
dd.sleep()
dd.shout()
mm=monkey("金丝猴波斯猫")
print("hou的名字",mm.name)
mm.sleep()
mm.shout()

结论:
如果在子类中使用了构造方法 那么在子类的构造方法中必须声明调用父类的构造方法
如果在子类中没有使用了构造方法 那么在子类会默认调用父类的构造方法
#父类
class Animal:
    def __init__(self,name):
        self.name=name
    def sleep(self):
        print(self.name,"在睡觉")
    def shout(self):
        print(self.name,"在大叫")
#子类
class cat(Animal):
    #如果在子类中使用了构造方法 那么在子类的构造方法中必须声明调用父类的构造方法
    # 如果在子类中没有使用了构造方法 那么在子类会默认调用父类的构造方法
    def __init__(self,name,age):
        self.age=age
        super().__init__(name)
    def shout(self):
        print(self.name,"miaomiao")
    def eatfish(self):
        print(self.name,"在吃鱼")
#子类2
class dog(Animal):
    def shout(self):
        print(self.name,"wangwang")
#子类3
class monkey(Animal):
    def shout(self):
        print(self.name,"zhazha")
#实例化
cc=cat("波斯猫",12)
print("猫的名字",cc.name,"猫的年龄",cc.age)
cc.sleep()
cc.shout()
dd=dog("哈士奇")
print("狗的名字",dd.name)
dd.sleep()
dd.shout()
mm=monkey("金丝猴波斯猫")
print("hou的名字",mm.name)
mm.sleep()
mm.shout()

  • 10
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值