python静态方法、类方法、属性方法、魔法方法

1、静态方法

  • 作用:静态方法可以更好的组织代码,防止代码变大后变得比较混乱。
  • 特性: 静态方法只是名义上归类管理,实际上在静态方法里访问不了类或则实例中的任何属性
  • 静态方法使用场景:
    • 1)我们要写一个只在类中运行而不在实例中运行的方法.
    • 2)经常有一些跟类有关系的功能但在运行时又不需要实例和类参与的情况下需要用到静态方法.
    • 3)比如更改环境变量或者修改其他类的属性等能用到静态方法.
    • 4)这种情况可以直接用函数解决, 但这样同样会扩散类内部的代码,造成维护困难.
  • 调用方式: 既可以被类直接调用,也可以通过实例调用

@staticmethod静态方法:

class Dog(object):
    def __init__(self,name):
        self.name = name
    @staticmethod
    def eat():
        print("I am a static method")
d = Dog("ChenRonghua")
d.eat()                       #方法1:使用实例调用
Dog.eat()                   #方法2:使用类直接调用

2、类方法

  • 作用:无需实例化直接被类调用

  • 特性: 类方法只能访问类变量,不能访问实例变量

  • 类方法使用场景: 当我们还未创建实例,但是需要调用类中的方法

  • 调用方式: 既可以被类直接调用,也可以通过实例调用

@classmethod类方法:

class Dog(object):
    name = '类变量' #在这里如果不定义类变量仅定义实例变量依然报错
    def __init__(self,name):
        self.name = '实例变量'
        self.name = name
    @classmethod
    def eat(self,food):
        print("%s is eating %s"%(self.name,food))
Dog.eat('baozi')                   #方法1:使用类直接调用
d = Dog("ChenRonghua")          
d.eat("包子")                      #方法2:使用实例d调用

3、属性方法

作用:属性方法把一个方法变成一个属性,隐藏了实现细节,调用时不必加括号直接d.eat即可调用self.eat()方法

例1:@property属性方法

class Dog(object):
    def __init__(self, name):
        self.name = name

    @property
    def eat(self):
        print(" %s is eating" % self.name)
d = Dog("ChenRonghua")
d.eat()
# 调用会出以下错误, 说NoneType is not callable, 因为eat此时已经变成一个静态属性了, 
# 不是方法了, 想调用已经不需要加()号了,直接d.eat就可以了

例2:航空公司具体实例:

class Flight(object):
    def __init__(self,name):
        self.flight_name = name

    def checking_status(self):
        print("checking flight %s status " % self.flight_name)
        return  1

    @property
    def flight_status(self):
        status = self.checking_status()
        if status == 0 :
            print("flight got canceled...")
        elif status == 1 :
            print("flight is arrived...")
        elif status == 2:
            print("flight has departured already...")
        else:
            print("cannot confirm the flight status...,please check later")

f = Flight("CA980")
f.flight_status

Python中的魔法方法

  • 魔法方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python所调用,你可以定义自己想要的行为,而这一切都是自动发生的。它们经常是两个下划线包围来命名的(比如 initlt),Python的魔法方法是非常强大的,所以了解其使用方法也变得尤为重要!

1.init(self[, …]),new(cls[, …]),del(self)

  • init 构造器,当一个实例被创建的时候初始化的方法。但是它并不是实例化调用的第一个方法,__new__才是实例化对象调用的第一个方法,它只取下cls参数,并把其他参数传给 init。__new__很少使用,但是也有它适合的场景,尤其是当类继承自一个像元组或者字符串这样不经常改变的类型的时候。

new:

1. __new__ 是在一个对象实例化的时候所调用的第一个方法
2. 它的第一个参数是这个类,其他的参数是用来直接传递给 __init__ 方法
3. __new__ 决定是否要使用该 __init__ 方法,因为 __new__ 可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果 __new__ 没有返回实例对象,则 __init__ 不会被调用
4. __new__ 主要是用于继承一个不可变的类型比如一个 tuple 或者 string
5. __new__ return的是一个构建的实例

init:

构造器,当一个实例对象被定义时调用

del:

析构器,当删除一个实例对象时调用
发布了22 篇原创文章 · 获赞 3 · 访问量 826

猜你喜欢

转载自blog.csdn.net/weixin_44980838/article/details/104805369
今日推荐