zoukankan      html  css  js  c++  java
  • Python — 面向对象进阶2

    静态调用

    """
    正方形的例子,如果类中需要非该类成员存在,则可以使用静态调用的方法@staticmethod
    
    """
    class Joker(object):
        
        def __init__(self,a,b,c,d):
            self.a = a
            self.b = b
            self.c = c   
            self.d = d
        @staticmethod
        def is_valid(a,b,c,d):
            for i in [b,c,d]:
                if i != a:
                    return False
            else:
                return True
            
        def area(self):
            if res == True:
                area_ = self.a * self.b
                return area_

    #输出的方法一 joker
    = Joker(2,2,2,2) res = joker.is_valid(2,2,2,2) if res == True: print(joker.area())

    #输出的方法二
    def amin():
        joker = Joker(2,2,2,2)
        res = joker.is_valid(2,2,2,2)
        if res == True:
            print(joker.area())
    amin()

    继承

    """
    继承
    
    """
    class A(object):
        def __init__(self):
            self.a = 100
            self.a1 = 200
        def sum_(self):
            SUM_ = self.a + self.a1
            return SUM_
        
    class B(A):
        def __init__(self):
            #这个init是B自身的
            A.__init__(self)
        def print(self):
            res = self.sum_()
            print(res)
    
    b = B()
    b.print()
    """
    带参数的继承
    
    """
    class A(object):
        def __init__(self,a1):
            self.a = 100
            self.a1 = a1
        def sum_(self):
            SUM_ = self.a + self.a1
            return SUM_
        
    class B(A):
        def __init__(self,a1,b1):
           #这个init是B自身的
            self.b1 = b1
            A.__init__(self,a1)
        def print(self):
            res = self.sum_()
            print(res)
            
    b = B(1000,'1')
    b.print()

    装饰器

    """
    装饰器的用法
    
    """
    def number(func):
        def warp(a,b,c):
            num = a + b
            return func(a,num,c)
        return warp
    
    @number
    def sum(n1,n2,n3):
        #这里的sum就相当于上面的func
        #这里的n,n2,n3其实就相当于上面的a,b,c
        #其实最后运算的三个参数 是return func(a,num,c)中的a,num,c
        print (n1,n2,n3)
        print(n1 * n2)
    
    sum(1,2,4)
    # 装饰器
    
    def Joker(func):
    
        def warp(n1,n2,n3):
    
            num = n1 + n2
    
            return func(0,num,n3)
    
        return warp
    
    
    
    #装饰器将前两个数字求和,函数本身第三个参数乘上这个和*
    
    @Joker
    
    def SUM(num1,num2,num3):
    
        print(num1,num2,num3)
    
        print(num2 * num3)
    
    
    
    SUM(10,2,3)
    """
    不定长参数,返回的是元组,**keargs返回的是字典
    
    """
    #*args
    def haha(*args):
        print(args)
             
    haha(1,2,3,4,5,6,7,8,9)

    """
    不定长参数,返回的是元组,**keargs返回的是字典
    
    """
    #*args
    def haha(*args):
        print(args)
             
    haha(1,2,3,4,5,6,7,8,9)
    
    # **keargs 相当于带参数名称的传参
    def lala(**kwargs):
    print(kwargs)
    
    lala(a=1,b=2,c=3)
    """
    完整版的装饰器,里面带了不定长参数*args和**kwargs
    
    """
    def deco2(param):
        print(param)
        def deco(func):
            def warp(*args,**kwargs):
                print(args)
                print(kwargs)
                kwargs['name2'] = 10000
                return func(*args,**kwargs)
            return warp
        return deco
    
    @deco2(1000)
    def joker(name2):
        print(name2)

    列表

    列表生成式

    优点: 计算速度快,因为一次性已经全部加载到内存中了,适合数据量不是太大的情况10000- 2000

    缺点:占用内存

    列表生成器

    优点: 节约内存空间

    缺点: 计算速度慢,因为要生成

    # 列表生成式
    
    a = (x for x in range(100000000000) if x % 2== 0)
    for i in range(100):
        print(next(a))
        
    """
    列表生成式
    
    # 列表生成式
    
    a = [x for x in range(100000000000) if x % 2== 0]
    优点: 计算速度快,因为一次性已经全部加载到内存中了,适合数据量不是太大的情况10000- 2000-
    缺点: 占用内存
    
    # 生成器
    
    a = (x for x in range(100000000000) if x % 2== 0)
    优点: 节约内存空间
    缺点: 计算速度慢,因为要生成.
    """
    
    import os
    
    path = '/Users/joker/jokers/DataSet/stanford-dogs-dataset/Annotation'
    res = os.listdir(path)
    print(res)
    genter = (dir_ for dir_ in res)
    print(next(genter))
  • 相关阅读:
    ZOJ 3018
    poj2464
    Gauss
    【C】关于内存地址
    【C】typedef与define的区别
    C位移操作
    操作系统使用批处理文件更改网络配置
    【Linux】查看某个进程的线程数量(转)
    数据结构快速排序
    C++Explanation of ++val++ and ++*p++ in C
  • 原文地址:https://www.cnblogs.com/liyuanyuan97/p/11323421.html
Copyright © 2011-2022 走看看