python学习笔记4

 面向对象

是一种编程思想

类:具有相同属性或者相同行为的一类事物

对象:是类的具体实例,真实存在的

世界万物皆为对象

战车(类)——→救护车(对象)

属性:名称

行为:run()

在类中定义属性和行为,之后在对象上调用

救护车.run()即为面向对象

class Tank():#类一般首字母大写,驼峰命名
    def __init__(self,name,sp):  #魔法方法,在创建对象的时候自动执行
        self.name = name
        self.sp = sp
    def __str__(self):#格式化输出,打印对象时打印的值。一定要有返回值。
        return '滴度滴度'
    def run(self):#self为对象本身
        print('战车跑')
    def music(self):
        print('播放音乐')

jhc = Tank('救护车',4000)  #创建了面包车对象
print(jhc)
print('战车名为{},装甲片数量为{}。'.format(jhc.name,jhc.sp))
jhc.run()  #调用对象的跑的方法
jhc.music()  #调用对象的播放音乐方法

赏金猎人打怪物:

class Gun():
    def __init__(self,name):
        self.name = name
        self.bullet_num = 0
    def add_bullet(self,num):#加子弹
        self.bullet_num += num
    def fire(self,enemy):#枪射击
        self.bullet_num -= 1
        print('向%s攻击,弹药剩余%s发'%(enemy.name,self.bullet_num))
        enemy.damage()
class Soldier():
    def __init__(self,name,age,gun=None):
        self.name = name
        self.age = age
        self.gun = gun
        self.hp = 80
    def open_fire(self,target):#人操作枪
        if self.gun is not None:
            self.gun.fire(target)#枪开火
        else:
            print('没有武器')
    def damage(self):#造成伤害
        self.hp -= 15
        if self.hp <= 0:
            print('消灭怪物')
        else:
            print('还剩%s血量'%self.hp)

dangong = Gun('ak47')#创建一把枪
dangong.add_bullet(10)#加子弹
lbn = Soldier('雷班纳',12,dangong)#创建一个猎人
enemy = Soldier('巨蚁',5)#创建个怪物
lbn.open_fire(enemy)
lbn.open_fire(enemy)
lbn.open_fire(enemy)
lbn.open_fire(enemy)
lbn.open_fire(enemy)
lbn.open_fire(enemy)

私有属性和私有方法:属性和方法不能直接调用。前边加__即为私有。

利用公有方法可以给私有属性的值进行校验

私有属性可以避免子类直接访问和名字冲突的问题。

class Dog():
    def __init__(self):
        self.name = '狗'
        self.__age = 12  # 私有属性

    # 利用公有方法给私有属性赋值
    def set_age(self, age):
        if age > 0:
            self.__age = age

    # 利用公有方法返回私有属性的值
    def get_age(self):
        return self.__age


dog = Dog()
print(dog.name)
dog.set_age(14)
print(dog.get_age())

私有方法:

class Market():
    def __buy(self):#私有方法
        return '购买成功'
    #利用公有方法去调用私有方法
    def check_money(self,money):
        if money < 100:
            print('金额不足')
        else:
            return self.__buy()
t = Market()
print(t.check_money(200))
print(t.__buy)#会报错。私有方法可避免直接被调用

实例属性:对象的属性

类属性:定义在类中的属性,有全局的含义

私有实例属性:不想让外部直接访问

私有类属性:不想让外部直接访问

class Tank():
    count = 0  # 类属性
    __count = 0  # 私有类属性

    def __init__(self, name):
        self.name = name  # 实例属性
        Tank.count += 1
        self.__age = 12  # 私有实例属性
        Tank.__count += 1
    def get_age(self):
        return self.__age
    def get_count(self):
        return Tank.__count

jhc = Tank('救护车')  # __init__一定会执行
print(Tank.count)
print(jhc.name)
print(jhc.get_age())
print(jhc.get_count())

静态方法:不引用类属性,或者实例属性,实例方法。是个独立个体。

用@staticmethod修饰的方法叫静态方法。静态方法里不能写self,但是可以写参数。

静态方法支持类或对象直接调用。

import time
class Dog():
    desc = '哈哈'
    def __init__(self):
        self.name = '哈士奇'
    @staticmethod
    def get_time():
        return time.strftime('%Y-%m-%d')

print(Dog.get_time())

类方法:

用@classmethod修饰的方法叫类方法,可访问类属性。

公有类属性支持类和对象直接调用。

类方法
class Dog():
    count = 0
    #魔法方法 初始化方法 构造方法
    def __init__(self):
        self.name = '哈士奇'
    #实例方法
    def show(self):
        print('哈哈')
    #静态方法  类或者对象
    @staticmethod
    def get_desc():#不访问类属性、实例属性
        print('诶嘿')
    #类方法
    @classmethod
    def get_count(cls):#访问类属性、也可以间接通过创建对象来访问对象属性
        print(cls.count)
    @classmethod
    def create_obj(cls):#间接访问
        return cls().name

dog= Dog()
dog.get_count() #类方法 支持对象调用
Dog.get_count() #类方法 支持类调用
print(Dog.create_obj())

属性方法:

class Person():
    def __init__(self):
        self.__age = 0
    def set_age(self,age):
        if age >0:
            self.__age = age
        else:
            print('报错')
    def get_age(self):
        return self.__age

p = Person()
p.set_age(10)
print(p.get_age())

class Person():
    def __init__(self):
        self.__age = 0
    @property
    def age(self):#相当于get_age方法
        return self.__age
    @age.setter
    def age(self,age):#相当于set_age方法
        if age >0:
            self.__age = age
        else:
            print('报错')
p = Person()
p.age = 10#相当于调用set_age方法
print(p.age)#相当于调用get_age方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值