学习视频地址:https://www.bilibili.com/video/BV15J411T7WQ?p=142
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
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
类方法:
特点:
1.定义需要依赖装饰器@classmethod
2.类方法中参数不是一个对象,而是类
print(cls) #
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