实例,静态,类方法示例

A:实例方法:没有@classmethod和@staticmethod标记的方法是实例方法。假设这个有n个比传参数,类型调用的时候需要给n个参数传参。而实例调用时则只能传n-1个参数,因为第一个参数被系统默认传递了实例本身;因为有这个规定,所以实例方法如果没有参数,则实例是无法调用的,但类型可以调用.
B:类方法:也叫类型方法,用@classmethod做标记的方法.假设其有n个必传参数,如果是类调用,则需要传n-1个参数,第一个参数同样是内定的类型本身。如果是实例调用,则需要传n个参数。类方法要让类型能调用,当然也需要至少一个参数.
C:静态方法:@staticmethod标记的方法。类和实例都可以调用。无内定的参数问题,方法有多少参数就必须传递多少参数。
当然,这里的参数忽略了缺省的参数

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time    : 2018/6/12 14:13
# @File    : test_demo11.py


class A:
    def __init__(self, x=0):
        self.x = x

    # 类实例方法
    def foo(self, y=1):
        print(self.x, y)

    @classmethod
    def class_foo(cls, x=1, y=1):
        return cls(x)

    @staticmethod
    def static_foo(x=2):
        return A(x)


a = A()
print('a.x------->', a.x)
a.foo()
# A.foo()  # 错误,不能这么调用
print()
b = a.class_foo()
print(b.x)
b1 = A.class_foo()
print(b1.x)
print()

c = a.static_foo()
print(c.x)
c1 = A.static_foo()
print(c1.x)

猜你喜欢

转载自www.cnblogs.com/fmgao-technology/p/9173202.html
今日推荐