首页 > 其他 > 详细

面向对象进阶

时间:2019-08-08 17:38:11      阅读:94      评论:0      收藏:0      [点我收藏+]

1.静态方法和类方法

定义一个三角形的类

"""
如果类中需要非该类成员存在,则可以使用静态调用的方法@staticmethod
"""

from math import sqrt


class Triangle(object):

    def __init__(self, a, b, c):
        self._a = a
        self._b = b
        self._c = c

    @staticmethod
    def is_valid(a, b, c):
        return a + b > c and b + c > a and a + c > b

    def perimeter(self):
        return self._a + self._b + self._c

    def area(self):
        half = self.perimeter() / 2
        return sqrt(half * (half - self._a) *
                    (half - self._b) * (half - self._c))


def main():
    a, b, c = 3, 4, 5
    # 静态方法和类方法都是通过给类发消息来调用的
    if Triangle.is_valid(a, b, c):
        t = Triangle(a, b, c)
        print(t.perimeter())
# 也可以通过给类发消息来调用对象方法但是要传入接收消息的对象作为参数 # print(Triangle.perimeter(t)) print(t.area()) # print(Triangle.area(t)) else: print(‘无法构成三角形.‘) if __name__ == ‘__main__‘: main()

 案例:输入四条边判断它是否为一个正方形,如果是,计算面积

class zhengfangxing(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_
def amin():
    zfx = zhengfangxing(2,2,2,2)
    res = zhengfangxing.is_valid(2,2,2,2)
    if res == True:
        print(zhengfangxing.area())
amin()              

2.类的继承

class A(object):
    def __init__(self):
    ?class A(object):
    def __init__(self):
        self.a = 100
    def A1(self):
        print(A1)
#在类名中写上继承的类。
class B(A):
    def __init__(self):
        A.__init__(self)
        self.b = 200
        #self.b1 = b1
    def B1(self):
        print(B1)
b_ = B()
print(b_.a)
b_.A1()    self.a = 100
    def A1(self):
        print(A1)
#在类名中写上继承的类。
class B(A):
    def __init__(self):
        A.__init__(self)
        self.b = 200
        #self.b1 = b1
    def B1(self):
        print(B1)
b_ = B()
print(b_.a)
b_.A1()

案例:创建一个父类和子类,
          父类计算两个数字的和记为SUM_子类打印这个SUM

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):
        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):
        A.__init__(self,a1)#supper(A,self),_init(a1)
    def Print(self):
        res = self.sum_()
        print(res)
b = B(1000,100)
b.Print()
#用类方法就可以改变类的属性
class A(object):
    def __init__(self):
        self.joker = 100
    @classmethod
    def a(cls):
        return cls()
joker = A.a()
print(joker)
joker2 = A()
joker2.joker_1 = 1000
print(joker2)

列表生成式

#列表生成式
a = [x for x in range(100) if x % 2== 0]
print(a)

优点:计算速度快,因为一次性全部到内存中,适合数据量不是太大的情况
缺点:占用内存

列表生成器

a = (x for x in range(100) if x % 2== 0)

优点:节约内存空间

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

函数闭包

def foo():
    def bar():
        return hell0
    return bar
f1 = foo()
print(f1)
def foo():
    def bar():
        def bar2():
            return hell02
        return bar2
    return bar
f1 = foo()
print(f1)
f2 = f1()
print(f2())

装饰器

def deco(func):
    def warp(H):
        print(Joker)
        return func(H)
    return warp
@deco
def Joker(name):
    print(hello %s%name)

Joker(huwang)

创建一个装饰器,三个函数(两个参数),
装饰器处理这两个参数的和
每一个函数打印这两个参数

def Joker(func):
    def warp(num1,num2):
        print(num1+num2=,num1 + num2)
        return func(num1,num2)
    return warp
@Joker
def SUM(num1,num2):
    print(num1,num2)
SUM(100,200)
def Joker(func):
    def warp(num1,num2):
        print(num1+num2=,num1 + num2)
        return func(num1,num2)
    return warp
@Joker
def SUM(num1,num2):
    print(num1,num2)
@Joker
def SUM2(num1,num2):
    pass
SUM(100,200)
SUM2(1,2)
ef Joker(func):
    def warp(num1,num2,num3):
        num = num1 + num2
        return func(num1,num2,num)
    return warp
#装饰器将前两个数字求和,函数本身的第三个参数乘上这个和
@Joker
def SUM(num1,num2,num3):
    print(num3)
SUM(10,2,3)
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)

创建虚拟环境
conda create --name Joker python=3.7;

pip freeze

conda activate joker env_name

conda deactivate;

conda env list;

conda env remove --name env_name;

面向对象进阶

原文:https://www.cnblogs.com/yutianqi0704/p/11322416.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!