这是我参与11月更文挑战的17天,活动详情查看:2021最后一次更文挑战。
方法介绍
类的方法主要可分为:
普通方法(实例方法)类方法静态方法
普通方法(实例方法)
普通方法保存在类中,在实例化对象后,一般通过对象调用。第一个参数必须为系统自建参数,默认为self,代指对象本身。
⚠️注意: self仅仅是变量名。使用其它也可,但最好不要修改。
class Demo(object):
def __init__(self):
self.name = "肉丝"
# 普通方法(实例方法)
def test(self):
print(self.name)
rose = Demo()
rose.test() # 实例化后 通过 对象 调用
当方法中需要使用普通字段(实例对象)时,通常使用普通方法。
静态方法
静态方法通过在方法上面添加@staticmethod装饰器定义,保存在类中。
静态方法不需要传入self参数,即使传入了self参数也并不像普通方法那样代指对象本身,仅仅是一个普通的形参。
静态方法的调用虽然可以通过对象调用,但一般由类调用。
class Demo:
def __init__(self):
self.name = "rose"
self.age = 18
def test(self):
print(self.name)
@staticmethod # 通过@staicmethod装饰器将方法转为静态方法
def stat_test(): # 静态方法 self不是必须加的,加了也不止对象
print("我是静态方法")
rose = Demo()
rose.test()
Demo.stat_test() # 一般通过类名调用
静态方法的参数并不代表对象这一特点,使静态方法在类中使用起来更像一个单纯的函数。完全可以将静态方法放在类的外部,当成函数使用。但是放在类中,便于使用与维护。
在类中定义一个打印输出当前时间的方法:
import time
class TimeTest:
@staticmethod
def showtime():
print(time.strftime("%H:%M:%S", time.localtime()))
nowtime = TimeTest()
TimeTest.showtime() # 通过 类名 调用 静态方法
类方法
类方法通过在方法上面添加@classmethod装饰器,保存在类中。
类方法不需要传入self。但有一个系统自建参数为cls,cls代指类本身。
类方法一般通过类调用,也可通过对象调用。
class Demo:
@classmethod # 通过@classmethod装饰器将方法转为静态
def clasmd(cls): # 自建cls参数 代指 当前类
print(cls) # <class '__main__.Demo'>
d = Demo()
Demo.clasmd() # 通过 类名 调用
总结
- 访问字段:
对象.字段名称 - 访问方法:
对象.方法名称([参数])
属性
在实际开发中,为了简便,当想访问方法以属性的访问形式时,就可以通过在方法上面添加@property装饰器,达到该效果。
class Demo:
def __init__(self):
self.name = "rose"
@property
def test(self):
print(self.name)
d = Demo()
d.test # 通过@property 以 普通属性 形式 访问 普通方法
⚠️注意: 以上@property只相当于一个只读属性,也就是说,仅能访问test函数的内容。
通过传参去改变self.name的值,删除掉self.name:
class Demo:
def __init__(self):
self.name = "rose"
@property
def test(self): # 只可访问模式
print(self.name)
@test.setter # d.set_test = "jack"
def test(self,para):
self.name = para
print(self.name)
@test.deleter
def test(self): # del d.test
del self.name
print(self.name) # 报错 self.name已被删除
d = Demo()
d.test # 通过@property 只读模式
# 改变self.name的值
d.test = "jack" # 给方法传参 以 赋值方式 会触发@test.setter
# 删除self.name
del d.test # del 会 触发 @test.deleter