zoukankan      html  css  js  c++  java
  • python之路第七天

    上篇我们已经了解了一些面向对象的基础知识,本次就了解下面向对象的一些进阶知识(虽然我也不知道有什么卵用)。

    静态方法(@staticmethod)

    静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作。使用装饰器@staticmethod定义静态方法。类对象和实例都可以调用静态方法;

    说了那么多,估计会有些懵逼,咱们还是直接上代码看下静态方法怎么使用吧!

    1.按照正常逻辑编写代码并加上@staticmethod定义静态方法eat:

    class People(object):
    
        def __init__(self,name):
    
            self.name = name
      
        @staticmethod #把eat方法变为静态方法
        def eat(self):
    
            print("%s is eating" % self.name)
      
    d = People("houyafan")
    
    d.eat()

    运行上面代码,我们会发现报以下错误:

    TypeError: eat() missing 1 required positional argument: 'self'

    ----------eat需要一个self参数,但调用时却没有传递

    so...我们可以得出一个结论:eat变成静态方法后,再通过实例调用时不会自动把实例本身当作一个参数传给self

    2.解决办法:

    1)调用时主动传递实例本身给eat方法,即d.eat(d) 

    class People(object):
    
        def __init__(self, name):
            self.name = name
     
        @staticmethod  # 把eat方法变为静态方法
        def eat(self):
    
            print("%s is eating" % self.name)
    
    d = People("houyafan")
    
    d.eat(d)
    
    #------打印输出------
    #houyafan is eating

    2)在eat方法中去掉self参数(这也意味着,在eat中不能通过self.调用实例中的其它变量了)

    class People(object):
    
        def __init__(self, name):
            self.name = name
     
        @staticmethod  # 把eat方法变为静态方法
        def eat():
    
            print("%s is eating" % self.name)
     
    d = People("cc")
    
    d.eat()
    #------------------打印输出----------------
    #print("%s is eating" % self.name)
    
    #NameError: name 'self' is not defined
    # 也就证明静态方法无法访问 类中变量

    类方法(@classmethod

    类方法是将类本身作为对象进行操作的方法,类方法使用@classmethod装饰器定义,其第一个参数是类,约定为cls。类对象和实例都可以调用类的方法。

    类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量。

    依然还是原来的代码,把eat变为类方法看下:

    2)在eat方法中去掉self参数(这也意味着,在eat中不能通过self.调用实例中的其它变量了)

     
  • 相关阅读:
    QT QT程序初练
    Linux Shell编程三
    Linux Shell编程二
    git操作
    git push命令
    Zabbix全方位告警接入-电话/微信/短信都支持
    CentOS 7安装TigerVNC Server
    MySQL各版本的区别
    MariaDB Galera Cluster 部署
    MySQL高可用方案MHA的部署和原理
  • 原文地址:https://www.cnblogs.com/houyf/p/5855708.html
Copyright © 2011-2022 走看看