专栏:python
个人主页:HaiFan.
专栏简介:Python基础已经更新完,接下来是Python面向对象的知识点。
方法
- 前言
- 普通方法
- 类方法
- 静态方法
- 总结
前言
方法是什么?
一个类,它有特征,也有动作,特征是属性,动作是方法,我们知道如何去定义一个函数,那么,把函数写在类中,就称为方法。
- 类方法
- 静态方法
- 普通发放
- 魔术方法
- 等等
普通方法
格式:
def 方法名(self[,参数,参数]):
pass
在这里,我们先写一个手机类,然后创建出对象。
class Phone():
brand = 'wudi'
price = 9999
type = 'nb 90'
a = Phone()
然后在手机类中写一个call方法
class Phone():
brand = 'wudi'
price = 9999
type = 'nb 90'
def call(self):
pass
call方法里的self是什么?
从英文上来翻译:self是自己的意思,那么我们把self打印出来会是什么呢?
从代码结果中可以看出,这两个的地址是相同的,可以认为:self就是a。谁调用这个call,谁就会被当作参数。
类方法
格式:
class 类名:
@classmethod
def 类方法名(cls):
方法体
普通方法必须依赖于对象,self就是对象,通过对象才能去调用。
cls是class的缩写,没有对象也可以调用,这个方法的参数是类名,通过类去调用。
class Phone():
def __init__(self,name):
self.name = name
def show_name(self):
print(f'{self.name}')
@classmethod
def test(cls):
print('----------test')
print(cls.name)
a = Phone('lisi')
Phone.test()
a.test()
在调用test方法的时候,只把cls打印出来了我想在test方法里打印出对象的name属性,但是报错了。这是因为这个name属性在test方法里是无法访问的。
类方法特点:
- 定义需要依赖装饰器
@classmethod
- 类方法的参数不是一个对象,而是类print(cls)
- 类方法中只可以使用类属性
- 类方法中不能使用普通方法
对4的解释:
普通方法中调用普通方法只需要 self.方法名
即可,因为他们是同级函数。那么,在类方法中写 self.方法名
,那么这个self是谁?类方法的参数是 cls
,在类方法中使用普通方法的的时候,这个self是不知道是什么的。
类方法的作用:
因为只能访问类属性和类方法,所以可以在对象创建之前,如果需要完成一些动作(功能)
静态方法
格式:
class Phone:
@staticmethod
def 方法名():
pass
直接看代码:
class Person:
__age = 18
def __init__(self):
self.name = 'lufei'
self.food = 'shaokao'
def show(self):
print('------>',self.__age)
@classmethod
def test(cls):
cls.__age = 100
print('---------->类方法')
print(cls.__age)
@staticmethod
def test1():
print('-------->静态方法')
print(Person.__age)
Person.test1()
静态方法:很类似于类方法
- 需要装饰器
@staticmethod
- 静态方法无需传递参数(cls,self)
- 也只能访问类的属性和方法,对象的是没有办法访问的
- 加载时机同类方法
总结
类方法和静态方法的不同之处
- 装饰器不同
- 一个有参一个无参
相同之处
- 只能访问类的属性和方法,对象的是无法访问的
- 都可以通过类名调用访问
- 都可以在创建对象之前使用,因为不依赖于对象
普通方法
不同之处:
- 没有装饰器
- 普通方法永远要依赖对象,因为每个普通方法都有一个self
- 只有创建了对象,才可以调用普通方法,否则无法调用