python基础(七) P142-P151

学习视频地址:https://www.bilibili.com/video/BV15J411T7WQ?p=142

P 142 面向对象

在这里插入图片描述
类的定义
在这里插入图片描述
在这里插入图片描述
普通方法:
1.call
在这里插入图片描述
例:

class Phone:
    brand = 'xiaomi'
    price = 4999
    type = 'mate80'

    # Phone类里面法:call
    def call(self):
        print('self------------>', self)
        print('正在访问通讯录:')
        for person in self.address_book:
            print(person.items)
        print('正在打电话。。。')
        print('留言:',self.note)

p = Phone()
p.note = '我是p的note'
p.address_book = [{'123456': '楠'}, {'456789': '潘'}, {'123789': '亚'}]
print(p, '--------->1')
p.call()

print('*' * 30)
p2 = Phone()
p2.note = '我是p22222222的note'
p2.address_book = [{'123456': '楠'}, {'456789': '潘'}, {'123789': '亚'}]
print(p2, '----------->2')
p2.call()
结果:
E:\python\python.exe C:/Users/Administrator/Desktop/Demo/代码/17day/71801.py
<__main__.Phone object at 0x0000020075057940> --------->1
self------------> <__main__.Phone object at 0x0000020075057940>
正在访问通讯录:
<built-in method items of dict object at 0x0000020074F8C168>
<built-in method items of dict object at 0x0000020074F81FC0>
<built-in method items of dict object at 0x0000020075050F78>
正在打电话。。。
留言: 我是p的note
******************************
<__main__.Phone object at 0x0000020075057978> ----------->2
self------------> <__main__.Phone object at 0x0000020075057978>
正在访问通讯录:
<built-in method items of dict object at 0x0000020075050D80>
<built-in method items of dict object at 0x000002007505C318>
<built-in method items of dict object at 0x000002007505C1B0>
正在打电话。。。
留言: 我是p22222222的note

2.__init__(self) 魔术方法之一
在这里插入图片描述

class phone:
    def __init__(self):
        print('------------>init')

    def call(self):
        print('--------->call')
        print('价格', self.price)


p = phone()
# p.price = '1999'
# p.call()
结果:
------------>init
# --------->call
# 价格 1999

3.init进阶版

class Person:
    name = '喃喃'

    def __init__(self,name,age):
        self.name = name
        self.age = age

    def eat(self,food):
        print('{}正在吃{}!...'.format(self.name,food))

    def run(self):
        print('{},今年{}岁,正在跑步'.format(self.name,self.age))


p = Person('李四',20)
# p.name = 'lisi'
p.eat('红烧肉')
p.run()

p1 = Person('王五',22)
# p1.name = '王五'
p1.eat('狮子头')
p1.run()
结果:
李四正在吃红烧肉!...
李四,今年20岁,正在跑步
王五正在吃狮子头!...
王五,今年22岁,正在跑步

类的方法应用:

# 猫
class Cat:
    cattype = '猫'

    # 通过—__init__初始化的特征:
    def __init__(self, nickname, age, color):
        self.nickname = nickname
        self.age = age
        self.color = color

    # 动作:方法
    def eat(self, food):
        print('{}喜欢吃{}'.format(self.nickname, food))

    def catch_mouse(self, color, weight):
        print('{},抓了一只{}kg的{}的大老鼠!'.format(self.nickname, weight, color))

    def sleep(self, hour):
        if hour < 5:
            print('继续睡觉')
        else:
            print('起床抓老鼠')

    def show(self):
        print('这只猫的详情信息:')
        print(self.color,self.nickname,self.age)


# 创建对象
cat1 = Cat('花花', 2, '灰色')

# 通过对象调用方法
cat1.catch_mouse('黑色', 2)
cat1.sleep(8)
cat1.eat('小金鱼')
cat1.show()
结果:
花花,抓了一只2kg的黑色的大老鼠!
起床抓老鼠
花花喜欢吃小金鱼
这只猫的详情信息:
灰色 花花 2

P151 类方法和静态方法

类方法:
特点:
1.定义需要依赖装饰器@classmethod
2.类方法中参数不是一个对象,而是类
print(cls) #<class '__main__'Dog>
3.类方法中只可以使用类属性
4.类方法中可否使用普通方法? 不能

类方法作用:
因为只能访问类属性和类方法,所以可以在对象创建之前,如果需要完成一些动作(功能)
例:

class Dog:
    def __init__(self, nickname):
        self.nickname = nickname

    def run(self):
        print('{}在院子里跑来跑去!'.format(self.nickname))

    @classmethod
    def test(cls):
        print(cls)
        # print(cls.nickname) 报错


d = Dog('大黄')
d.run()
d.test()
结果:
E:\python\python.exe C:/Users/Administrator/Desktop/Demo/代码/17day/71805.py
大黄在院子里跑来跑去!
<class '__main__.Dog'>

静态方法:很类似类方法
1.需要装饰器@staticmethod
2.静态方法是无需传递参数(cls,self)
3.也只能访问类的属性和方法,对象的是无法访问的
4.加载时机同 类方法
例:
在这里插入图片描述
类方法和静态方法 总结:
不同:
1.装饰器不同
2.类方法是有参数的,静态方法没有参数
相同:
1.只能访问类的属性和方法,对象的是无法访问的
2.都可以通过类名调用访问
3.都可以在创建对象之前使用,因为不依赖对象
普通方法与这两种区别:
不同:
1.没有装饰器
2.普通方法是要依赖对象,因为每个普通方法都有一个self
3.只有创建了对象才可以调用普通方法,否则无法调用。

P152 魔术方法
重点:
__init__ (构造方法,创建完空间之后调用的第一个方法)
__str__
了解:
__new__ 作用 开辟空间
__del__ 作用 没有指针引用的时候会调用,99%都不需要重写
__call__ 作用 :想不想将对象当成函数调用
__str__
触发时机: 打印对象名 自动触发去调用__str__里面的内容
注意: 一定要在__str__方法中添加return, return后面内容就是打印看到内容

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return '姓名是:' + self.name + ',年龄:' + str(self.age)


p = Person('tom', 18)
print(p)
p2 = Person('nannan',21)
print(p2)
结果是:
E:\python\python.exe C:/Users/Administrator/Desktop/Demo/代码/17day/71806.py
姓名是:tom,年龄:18
姓名是:nannan,年龄:21

__new__ :
在这里插入图片描述
带参数的new 括号中只跟*(cls)
在这里插入图片描述
__del__ :
特点:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值