python基础语法04

一、面向对象

1、类

类是一系列事件的统称,同类事物必定具有相同的特征。

(1)特征

状态(品种,重量等)/变量(成员变量)

(2)类的定义

定义格式一:

class 类名:

    pass

定义格式二:

class 类名:

    成员

class Cat:

    pass

(3)创建对象

格式:

变量名 = 类名()

cat1 = Cat()

2、类成员

成员变量

(1)定义格式一:

class 类名:

    def __init__(self):

        self.变量名1 = 值1

        self.变量名2 = 值2

        self.变量名3 = 值3

调用格式:

取值:对象名.变量名

赋值:对象名.变量名 = 值

(2)定义格式二:

对象.变量名 = 值

调用格式:

取值:对象名.变量名

赋值:对象名.变量名 = 值

注意:

格式二声明变量:

如果变量名不存在视为定义变量

如果变量名存在视为调用变量

(3)总结

两种变量定义的区别:

1、在类定义中声明的变量为公有变量/公有属性,每个对象均存在此变量对应的属性

2、在创建对象后声明的变量为独有变量/独有属性,仅当前对象存在此变量对应的属性

例子:

class Cat:
    def __init__(self):
        self.type = "波斯猫"
        self.name = None

cat1 = Cat()
print(cat1.type)
cat1.name = "大帅"
print(cat1.name)
#给cat1穿衣服
cat1.cloth = "red"
print(cat1.cloth)

3、类的成员方法

(1)定义格式一:

class 类名:

    def 方法名(self):

        方法体

调用格式一:

对象名.方法名()

注意:

self仅在声明时占位,无需传递具体参数

(2)定义格式二:

class 类名:

    def 方法名(self,形参1,形参2...):

        方法体

调用格式二:

对象名.方法名(实参1,实参2...)

例子:

def eat(self):
    print("猫吃鱼")

def climb(self, meter):
    print("猫会爬树,爬了%d米" % meter)

4、__init__方法

__init__方法在创建对象时被执行,无需手工调用即可执行

对于程序中声明、定义的方法在特定时机自动执行的方法,称为魔术方法

5、__str__方法

__str__方法在使用print函数打印输出对象到屏幕时被执行,无需手工调用即可执行。该方法也属于魔术方法

__str__()格式:

def __str__(self):

    return 打印对象时显示的信息

二、成员方法条用成员

1、成员方法调用成员变量

公有变量:直接访问,通过self进行

独有变量:访问要慎重,跨对象要重定义

例子:

class Cat:
    def __init__(self):
        # 公有变量
        self.type = "波斯猫"
        self.name = None
    def introduce(self):
        print("我是一只%s,我叫%s,我是%s色的" %(self.type,self.name,self.color))

cat1 = Cat()
cat1.name = "大帅"
# 独有变量
cat1.color = "red"
cat1.introduce()

cat2 = Cat()
cat2.name = "小帅"
#cat2.introduce()#第二个对象访问第一个对象的私有变量,会报错

2、成员方法调用成员方法

直接用self.方法()来调用

例子:

class Phone:
    def __init__(self):
        self.power = 100

    def game(self):
    '''打游戏'''
        if self.power < 10:
            print("当前电量不足以打游戏,打游戏操作提前终止")
        else:
            print("正在打游戏,耗电10")
            self.power -= 10

    def music(self):
        if self.power < 5:
            print("当前电量不足以打听歌,听歌操作提前终止")
        else:
            print("正在听歌,耗电5")
            self.power -= 5
    
    def call(self):
        if self.power < 4:
            print("当前电量不足以打电话,打电话操作提前终止")
        else:
            print("正在打电话,耗电4")
            self.power -= 4

    def answer(self):
        if self.power < 3:
            print("当前电量不足以接电话,接电话操作提前终止")
        else:
            print("正在接电话,耗电3")
            self.power -= 3

    def charge(self, num):
        if self.power + num > 100:
            self.power = 100
            print("充电操作提前结束,当前电量%d" % self.power)
        else:
            print("正在充电,充电量是%d" % num)
            self.power += num

    def __str__(self):
        return "当前电量%d" % self.power
p = Phone()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.game()
p.music()
p.answer()
print(p)
p.charge(5)
print(p)
p.charge(100)
p.music()
p.music()
p.music()
print(p)
p.charge(10)
print(p)
---------------------------------------------------

正在打游戏,耗电10

正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
正在打游戏,耗电10
当前电量不足以打听歌,听歌操作提前终止
当前电量不足以接电话,接电话操作提前终止
当前电量0
正在充电,充电量是5
当前电量5
充电操作提前结束,当前电量100
正在听歌,耗电5
正在听歌,耗电5
正在听歌,耗电5
当前电量85
正在充电,充电量是10
当前电量95

三、封装

1、私有

对成员私有化可以有效的保护从类的外部对类的内部成员进行访问

(1)私有属性定义格式

self.__属性名 = 值

(2)私有方法定义格式

delf __方法名(self):

    方法体

2、封装

封装操作可以对受访问保护的成员进行功能开放的控制,达到保护数据不被非法访问的目的

3、封装的标准格式

(1)对受保护的变量进行私有设置

self.__变量名 =  值

(2)提供对外访问器

访问器(get方法)

def get_变量名(self):

    return __变量名

(3)修改器(set方法)

def set_变量名(self,形参):

    self.__变量名 = 形参

(4)封装案例

class Cat:
    def __init__(self):
        self.__type = "波斯猫"
        self.__name = None

    def get_type(self):
        return self.__type
    def set_type(self,type):
        self.__type = type
    def get_name(self):
        return self.__name
    def set_name(self,name):
        self.__name = name

cat1 = Cat()
cat1.set_name("大帅")
print(cat1.get_name())

4、init(构造方法)自定义参数

为了方便私有属性get和set,因此可以在init自定义参数,这样在对象创建的时候就可以给私有属性赋值。

def __init__(self,形参1,形参2):

    self.__属性名1 = 形参1

    self.__属性名2 = 形参2

五、作业

【代码题】

定义一个水果类,然后通过水果类,创建苹果对象、橘子对象、西瓜对象并分别添加属性:颜色和价格

# 定义一个水果类,然后通过水果类,创建苹果对象、橘子对象、西瓜对象并分别添加属性:颜色和价格
class fruit:
    def __init__(self,color,price):
        self.color = color
        self.price = price
apple = fruit("red",24)
print("苹果是%s的,价格是%d元一斤" %(apple.color,apple.price))
orange = fruit("orange",25)
print("橘子是%s的,价格是%d元一斤" %(orange.color,orange.price))
watermelon = fruit("green",30)
print("西瓜是%s的,价格是%d元一斤" %(watermelon.color,watermelon.price))

【代码题】

定义一个电脑类,电脑有品牌,有价格,能放电影。分别创建2个对象"联想电脑" 和 "苹果电脑"。调用放电影的动作,联想电脑播放 电影"葫芦娃",苹果电脑播放"黑猫警长"。

class Computer:
    def __init__(self,type,price):
        self.type = type
        self.price = price
    def moived(self,moive):
        print("我可以播放%s电影" % moive)

com1 = Computer("联想电脑",10000)
print("我是%s,我的价格是%d元" %(com1.type,com1.price))
com1.moived("葫芦娃")
com1 = Computer("苹果电脑",12000)
print("我是%s,我的价格是%d元" %(com1.type,com1.price))
com1.moived("黑猫警长")

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值