zoukankan      html  css  js  c++  java
  • python-类

    1. dir(类名)

    • 查看该类的所有属性和方法。

    2. __init__() 作为一个特殊方法,它里面一般是规定一些属性或做一些初始化,让类具有一些基本特征(属性)。但是它没有return语句,这一点是区别与其他方法的。

    3.

    • 当类中变量引用的是不可变对象时(如字符串),类属性不因实例属性的变化而变化;实例属性跟着类属性的改变而改变。

    >>class A:

    >>  x = 7    %属性A.x

    >>foo = A()    %创建实例A()并赋值给变量foo

    >>foo.x      %实例属性

    7

    • 当类中变量引用可变对象(如列表),类属性和实例属性都能修改这个对像,从而影响另一方的值

    >>class B:

    >>  y = [1,2,3]

    >>bar = B()

    >>B.y.append("aa")    %修改类属性

    >>B.y

    [1,2,3,"aa"]

    >>bar.y

    [1,2,3,"aa"]

    >>bar.y.append(4)    %修改实例属性

    >>bar.y

    [1,2,3,"aa",4]

    >>B.y

    [1,2,3,"aa",4]

    4. if__name__ == "__main__": 的作用
    # file one.py def func(): print("func() in one.py") print("top-level in one.py") if __name__ == "__main__": print("one.py is being run directly") else: print("one.py is being imported into another module")

    # file two.py import one print("top-level in two.py") one.func() if __name__ == "__main__": print("two.py is being run directly") else: print("two.py is being imported into another module")

     

    如果你执行one.py文件,

    python one.py
    

    会输出:

    top-level in one.py
    one.py is being run directly


    如果你执行two.py文件,

    python two.py
    

    会输出:

    top-level in one.py
    one.py is being imported into another module
    top-level in two.py
    func() in one.py
    two.py is being run directly
    先导入并执行one.py这个程序 输出top-level in one.py 然后由于onepy是被导入的,所以name不等于_main_,执行else下面的话,剩下的继续执行twopy里的条件。因为在twopy里执行,所以name等于main。继续输出。对导入的模块来说,模块中的函数是调用时才执行的,但是语句会立刻执行(就是没有缩进的那些语句,如变量赋值语句、print、if else print啊什么的),你平时导入的那些模块之所以没有输出任何内容,那是因为模块里面压根就没有上述的 print 语句。
     
     
    5. 类方法

    class Foo:
    lang = "Java"           %类属性
      def __init__(self):
        self.lang = "python"    %实例属性
      @classmethod                    
      def get_class_attr(cls):
        return cls.lang
    if __name__ == "__main__":
      print("Foo.lang:", Foo.lang)
      r = Foo.get_class_attr()
      print("get class attrbute:", r)
      f = Foo()
      print("instance attribute:", f.lang)
      print("instance get_class_attr:", f.get_class_attr())

     
    @classmethod 装饰器,修饰的方法的参数中,第一个不是self, 这里使用了参数cls,用其他的也可以,只不过习惯用cls
    输出:
    Foo.lang: Java get class attrbute: Java instance attribute: python instance get_class_attr: Java

    不管是类还是实例来执行get_class_attr(), 得到的结果都是类属性值,说明装饰器@classmethod修饰的方法,其参数cls引用的对象是类对象Foo.

    5.静态方法
    import random
    class Foo:
      def__init__(self,name):
        self.name = name
      def get_name(self,age):
        if self.select(age):
          return self.name
        else:
          return "the name is secret"
      @staticmethod
      def select(n):
        a = random.randint(1,100)
        return a-n >0
    import __name__ == "__main__":
      f = Foo("luo")
      name = f.get_name(22)
      print(name)

    虽然select()函数在类里面但是和其他方法不同,它不以self为第一个参数。当使用它时,可以通过实例调用,如 self.select(n),也可以通过类调用这个方法,如 Foo.select(n).为它加上一个装饰器@staticmethod,称为静态方法。

    6. 继承
    C.__base__ 可以得到类的父类
    子类继承父类的全部属性和方法,但若子类中的方法或属性覆盖了父类(与父类同名)---称为对父类相应部分的重写,则就不再继承父类的该方法或属性。
    • 调用覆盖的方法


          

  • 相关阅读:
    <转>性能测试浅谈
    Linux内存机制以及手动释放swap和内存
    Jmeter(十二)_打印时间戳
    Jmeter(二十一)_脚本参数化与内存溢出的解决方案
    Jmeter(五)_函数
    爬虫利器_you-get
    Jmeter(九)_获取JDBC响应做接口关联
    JMeter(十三)-代理服务器录制脚本
    JMeter(十)-正则表达式关联
    JMeter(十四)-自动生成测试报告
  • 原文地址:https://www.cnblogs.com/Bella2017/p/8034065.html
Copyright © 2011-2022 走看看