首页 > 其他分享 >19.实例方法,类方法,静态方法

19.实例方法,类方法,静态方法

时间:2023-07-17 11:44:58浏览次数:38  
标签:静态方法 19 实例 static func print 方法

python 实例方法,类方法,静态方法

目录

实例方法

  • 只能被被实例对象调用

  • 第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法

  • 方法内部可以传类的属性和方法

类方法

  • 实例对象和类对象都可以调用。

  • 使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”

  • 通过它来传递类的属性和方法(不能传实例的属性和方法)

静态方法

  • 实例对象和类对象都可以调用。

  • 使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,

  • 该方法体中不能使用类或实例的任何属性和方法

静态方法既不需要传入self参数,也不需要传入cls参数,这使得调用静态方法并不能获得类中定义的属性和其他方法。静态方法有点像附属于类对象的“工具”。

方法 特点 定义 调用 作用
实例方法 第一个参数self 实例所使用的方法,第一个参数必须是实例对象,该参数名一般使用self定义。通过它来传递实例的属性和方法 实例对象调用 此方法实现的功能作用于具体的对象(实例),
类方法 @classmethod 定义的方法前需要加装饰器@classmethod .第一个参数必须是当前类对象,该参数名一般为cls 。通过它来传递类的属性和方法 。 类和实例调用 此方法实现的功能作用于类
静态方法 @staticmethod 定义的方法前需要加装饰器@staticmethod. 参数不受对象或类限制,方法体重也不能使用类或实例的任何属性和方法 类和实例调用 此方法现实的功能可以是针对类的一些规范,约束等,如针对学生行为规则,上课规则等 。

案例

class MyClass(object):
    def instance_m(self, x):
        print(f'executing instance_m({self}, {x})')

    @classmethod
    def class_m(cls, x):
        print(f'executing class_m({cls}, {x})')

    @staticmethod
    def static_m(x):
        print(f'executing static_m({x})')

mc = MyClass()


# 调用实例方法
print('-----------------------------------------')
mc.instance_m(666)
print(mc.instance_m)
print('-----------------------------------------')
# 调用类方法
mc.instance_m(666)
MyClass.class_m(666)
print(mc.class_m)
print('-----------------------------------------')
# 调用静态方法
mc.static_m(666)
MyClass.static_m('静态方法')
print(mc.static_m)

# 执行结果
-----------------------------------------
executing instance_m(<__main__.MyClass object at 0x00000200997046A0>, 666)
<bound method MyClass.instance_m of <__main__.MyClass object at 0x00000200997046A0>>
-----------------------------------------
executing instance_m(<__main__.MyClass object at 0x00000200997046A0>, 666)
executing class_m(<class '__main__.MyClass'>, 666)
<bound method MyClass.class_m of <class '__main__.MyClass'>>
-----------------------------------------
executing static_m(666)
executing static_m(静态方法)
<function MyClass.static_m at 0x000002009970B790>

class Person:
    name = "xiaobeike"
    age = 18

    # 构造方法
    def __init__(self, name, age):
        self.name = name
        self.age = age
        print("__init__ >>>")
        print(name,age)

    def instance_func(self):
        print("instance_func >>>")
        print(self.name,self.age)

    @classmethod
    def class_func(cls):
        print("class_func >>>")
        print(cls.name,cls.age)

    @staticmethod
    def static_func():
        print("static_func >>>")
        print(Person.name,Person.age)  # 可以,但不推荐


if __name__ == '__main__':
    p = Person("dabeike", 21)

    p.instance_func()  # 实例方法 只能由 "对象" 调用
    # Person.instance_method() # 报错

    print('-' * 10)
    p.class_func()
    Person.class_func()

    print('-' * 10)
    p.static_func()
    Person.static_func()

# 执行结果=======================================================
__init__ >>>
dabeike 21
instance_func >>>
dabeike 21
----------
class_func >>>
xiaobeike 18
class_func >>>
xiaobeike 18
----------
static_func >>>
xiaobeike 18
static_func >>>
xiaobeike 18

参考资料

参考资料1

参考资料2

标签:静态方法,19,实例,static,func,print,方法
From: https://www.cnblogs.com/tian777/p/17559626.html

相关文章

  • Selenium查找元素、元素的属性和方法
    查找元素官方文档:https://www.selenium.dev/documentation/webdriver/elements/locators/一般通过find_element或者find_elements方法获取元素后的类型是WebElement或该类型的列表。语法:#查找第一个符合条件的WebElement元素并返回。driver.find_element(By类型,"查找的语......
  • SQL Server 2016 KB2919355 安装失败
    WindowsServer2012R2安装SQLServer2016检查未通过,需要安装KB2919355。错误如下图: 按提示,下载安装WindowsServer2012R2更新(KB2919355),下载文件为:Windows8.1-KB2919355-x64.msu(690MB)。但是安装时又提示错误! KB2919442是WindowsServer2012R2更新......
  • Visio画扇形和圆环的方法
    一、扇形1、打开visio,先画一个圆,然后画两条直线,并确保要求两条直线都通过圆心,两条线中间的夹角就是扇形的角度;2、选中圆和这两条线,选择菜单中的开发工具-操作-拆分,这些形状就被拆分成几块。【注】visio2010该功能需要在“文件-visio选项-高级-常规”里勾选“以开发人员模式运......
  • requests.exceptions.ProxyError问题解决方法
    出现这个问题是因为你系统上在使用代理,然后你的代理又是规则匹配的。https://stackoverflow.com/questions/36906985/switch-off-proxy-in-requests-library3种解决方法:headers={"User-Agent":"Mozilla/5.0(WindowsNT10.0;Win64;x64;rv:109.0)Gecko/20100101Fi......
  • 【笔记整理】请求携带cookie的两种方法
    """方法一:在请求头header中携带Cookie请求头信息(因为本身Cookie就是用请求头传递的....)方法二:使用cookie参数传递cookie字典"""fromhttp.cookiejarimportCookieimportrequests.utilsfromrequests.cookiesimportRequestsCookieJarifname=='main':#方法一:......
  • 测试后台管理系统的思路和方法
    后台管理系统测试思路及方法说明:每个公司不管做什么业务,开发网站,app或者公众号亦或小程序,但凡涉及到用户信息或者订单信息都有对应的后台管理系统,所以每个测试人员基本上都有测试过后台管理系统的经验,但是后台管理系统测试不仅仅是基本的增删改查测试,还需要进行业务逻辑测试,......
  • 重构代码好方法之函数式编程
    在日常编码中,总会出现不同功能有相似之处,比如Session的连接与关闭啊,等等等等为了整理代码以获取眼睛的纯净,可以使用函数式编码步骤:重要的事说一遍第一步:定义函数式接口第二步:定义模板方法第三步:传递lambda表达式创建函数式接口@FunctionalInterfacepublicinterfaceDb......
  • lambda表示式使用方法及参数解析
    lambda表达式是一种匿名函数的简洁表示法,它可以在需要函数对象的地方使用,并且通常用于一次性的简单函数定义。以下是lambda表达式的一般形式:lambda参数列表:表达式lambda 关键字用于表示定义一个匿名函数。参数列表是函数的参数,可以包含零个或多个参数,多个参数之间使......
  • WORD中输入代码并保持对齐的方法
    取消这个勾减少行距......
  • 接口用例方法设计
    单接口测试⼀个单独的业务,就对应⼀个独⽴的接⼝。如:登录业务,对应登录接⼝。注册业务,对应注册接⼝。⽀付业务,对应⽀付接⼝。下图是设计思路,并非每条都要设计出来,得根据实际情况。比如,iHRM项目的部门添加接口,请求体参数有必须和非必须的。非必须的可以有任意组合。单接口测试......