python基础(七) P142-P151

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

P 142 面向对象

python基础(七) P142-P151_第1张图片
类的定义
python基础(七) P142-P151_第2张图片
python基础(七) P142-P151_第3张图片
普通方法:
1.call
python基础(七) P142-P151_第4张图片
例:

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) 魔术方法之一
python基础(七) P142-P151_第5张图片

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) #__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.加载时机同 类方法
例:
python基础(七) P142-P151_第6张图片
类方法和静态方法 总结:
不同:
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__ :
python基础(七) P142-P151_第7张图片
带参数的new 括号中只跟*(cls)
python基础(七) P142-P151_第8张图片
__del__ :
特点:
python基础(七) P142-P151_第9张图片
python基础(七) P142-P151_第10张图片
python基础(七) P142-P151_第11张图片
python基础(七) P142-P151_第12张图片

你可能感兴趣的:(基础)