zoukankan      html  css  js  c++  java
  • 9.1.面向对象:静态方法、类方法、属性方法

    前言:认为方法与函数同意义,由于这里使用method,所以称为方法


    静态方法:

    • 使用@staticmethod来定义静态方法。
    • 静态方法:类和实例都可以调用的方法,实际上跟类没什么关系了,对于这种不太相关的就使用静态方法【用实例和类调用没有区别】
    class Dog(object):
        def __init__(self,name):
            self.name=name
        def talk(self):
            print("%s is talking"%self.name)
        @staticmethod
        def eat(self,food):##
            print("%s is eating %s"%(self.name,food))
    
        @staticmethod
        def bulk():  ##如果不涉及实例变量的内容,可以不传self
            print("wang wang!")
    
    d=Dog("haha")
    d.talk()
    Dog.eat(d,"baozi")
    d.eat(d,"mianbao")
    d.bulk()
    Dog.bulk()

    注:由于不太相关,所以不会自动传self,如果操作涉及对象的内容,需要手动传入

    image


    类方法:

    • 使用@classmethod来定义类方法
    • 类方法只能访问类变量,不能访问实例变量
    • 如果涉及类变量比较多,而涉及实例变量比较少的话,使用类方法
    class Dog(object):
        name="haha"
        def __init__(self,name):
            self.name=name
    
        @classmethod
        def eat(self):
            print(self)# <class '__main__.Dog'>  说明self是一个类
            print("%s is eating "%self.name)#所以只会调用类中的name
    
    d=Dog("aotuman")
    d.eat()##haha is eating
    Dog.eat()##haha is eating
    d2=Dog("huluwa")
    d2.eat()

    注:类方法中的self是一个类,因此才会只访问类变量


    属性方法:

    现有需求:我输入因数,你就会打印出我要的计算结果

    用变量来实现:image

    缺点:无法约束赋值,假如我要限制不能输入非数字【实际上,如果要做这样的约束,就要建立一个函数,这实际上与属性方法相同,而如果在my_sum里面检测的话,就比建立一个函数还要麻烦了】

    用属性方法来实现:

    image

    • 代码:

    解释:

    • @property用于获取;@setter用于赋值传参;@deleter用于删除属性,并不影响其他与当前@property无关的函数
    • 要想他们三个关联起来,函数名必须相同,且前缀是@property修饰的函数的名

    image

    class calc:
        @property
        def my_sum(self):
            print(self.one+self.two)
        @my_sum.setter
        def my_sum(self,l):
            if isinstance(l[0],int)&isinstance(l[1],int):
                self.one=l[0]
                self.two=l[1]
            else:
                print("no int")
        @my_sum.deleter
        def my_sum(self):
            print("del done")
            del self.one,self.two
    c=calc()
    c.my_sum=[1,2]
    c.my_sum
    del c.my_sum
  • 相关阅读:
    高效管理,经理人须熟练运用的几个工具
    投资感情 收获人心
    忽如一夜入冬来
    贺嫦娥奔月
    正确处理人际关系,给自己做无形的投资
    观南溪豆干有感
    身在职场,请善待你的每一张白纸
    游一品天下有感
    增强影响力,如何提升你的“领袖气质”?
    oracle 创建表空间
  • 原文地址:https://www.cnblogs.com/progor/p/8419606.html
Copyright © 2011-2022 走看看