zoukankan      html  css  js  c++  java
  • 面向对象

    """

    class OldboyStudent():

    def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex


    s1 = OldboyStudent('李坦克','男',18)
    s2 = OldboyStudent('欧阳','men',18)
    s3 = OldboyStudent('li','men',22)


    a = s1.name
    print(a)
    s2.name = '王三炮'
    print(s2.name)
    s2.course = 'python'
    b = s2.__dict__
    print(b)
    del s2.course
    c = s2.__dict__
    print(c)
    print(id(OldboyStudent))
    print(id(s1.name))
    print(id(s2.name))
    """

    """
    class OldboyStudent():
    school = 'oldboy'
    def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex

    def learn(self):
    print("%s is learning"%self.name)

    def eat(self):
    print("%s is eating"%self.name)

    def sleep(self):
    print("%s is sleeping" %self.name)



    s1 = OldboyStudent('李坦克','男',18)
    s2 = OldboyStudent('欧阳','men',18)
    s3 = OldboyStudent('li','men',22)


    # OldboyStudent.learn(s1)
    # OldboyStudent.eat(s2)
    # OldboyStudent.sleep(s3)
    # a = OldboyStudent.school
    # print(a)

    s1.learn()
    """
    """
    class student():
    def __init__(self,name,age,high):
    self.name = name
    self.age = age
    self.high = high

    def learn(self):
    print("好好学习!!!!")

    def eat(self):
    print("好好吃饭")

    def sleep(self):
    print("好好睡觉!!!")


    s2 = student('xiaohui',18,170)
    s2.learn()
    s2.sleep()
    """


    import time
    class libai():
    def __init__(self,name,age):
    self.name =name
    self.age = age

    def mingcheng(self):
    print("我的名字是 %s " %self.name)

    def gjl(self):
    a = self.age + 2
    return a

    def smz(self):
    b = 100
    return b




    class hanxin():
    def __init__(self, name, age):
    self.name = name
    self.age = age

    def mingcheng(self):
    print("我的名字是 %s " % self.name)

    def gjl(self):
    a = self.age + 14
    return a

    def smz(self):
    b = 100
    return b



    s1 = libai('李白',20)
    s2 = hanxin('韩信',19)

    def ooo():
    H = 100
    L = 100

    d = 1
    while True:
    d+=1
    print('李白打韩信')
    H =H - s1.gjl()
    print("韩信的生命值",H)
    time.sleep(1)
    print('韩信打李白')
    L = L-s2.gjl()
    print("李白的生命值",L)
    time.sleep(1)
    if H <= 0:
    print("韩信已经死亡")
    break
    elif L <= 0:
    print("李白已经死亡")
    break
    else:
    print("第 " + str(d) + "回合开始")


    print("游戏结束!!")

    username = input("你叫什么名字?")
    lll = input("你好" + username +"这是一个韩信和李白的凄惨爱情故事 " '输入 ok 开始游戏!!!')
    if lll == 'ok':
    ooo()


    """
    class One:
    pass

    class Two:
    pass
    class Three(One):
    pass

    class Four(Two):
    pass

    a = Three.__bases__
    print(a)

    b = Four.__bases__
    print(b)

    c = One.__bases__
    print(c)

    d = Two.__bases__
    print(d)

    """

    class animal:
    def __init__(self,name):
    self.name = name
    def eat(self):
    print('吃')

    def sleep(self):
    print("睡觉")

    def jiao(self):
    print("叫")


    class pople(animal):
    def f1(self):
    print('玩游戏')

    class pig(animal):
    def f2(self):
    print("打滚")

    class dog(animal):
    def f3(self):
    print("看家护院")

    a = pople.sleep('xiaoming')
    r = dog('buqi')
    r.jiao()

    pople.f1("xiaohong")

    pople.__f1__

    # 示范代码
    """
    class A(object):
    def test(self):
    print("from A")

    class B(A):
    def test(self):
    print("from B")

    class C(A):
    def test(self):
    print('from C')

    class D(B):
    def test(self):
    print('from D')

    class E(C):
    def test(self):
    print("from E")

    def F(D):
    def test(self):
    print("from F")

    pass

    f1 = F("xiaohui")
    f1.test
    print(F.test)
    """


    # 下面两个都是继承
    # 在子类中调用父类的方法
    """
    class Vehice:
    Country = 'china'

    def __init__(self,name,speed,load,power):
    self.name = name
    self.speed = speed
    self.load = load
    self.poert = power

    def run(self):
    print('开车了!!!!')

    class Subway(Vehice):
    def __init__(self,name,speed,load,power,line):
    Vehice.__init__(self,name,speed,load,power)
    self.line = line

    def run(self):
    print("地铁%s 号线欢迎您" %self.name)
    Vehice.run(self)

    line1 = Subway('中国地铁','300m/s','100人/厢','电','1')
    line1.run()


    """



    # 用了super
    """
    class Vehice:
    Country = 'china'

    def __init__(self,name,speed,load,power):
    self.name = name
    self.speed = speed
    self.load = load
    self.poert = power

    def run(self):
    print('开车了!!!!')

    class Subway(Vehice):
    def __init__(self,name,speed,load,power,line):
    super().__init__(name,speed,load,power)
    self.line = line

    def run(self):
    print("地铁%s 号线欢迎您" %self.name)
    Vehice.run(self)



    class Mobike(Vehice):
    def dan(self):
    print("哇呜呜呜呜呜 ,小单车来了")


    line1 = Subway('中国地铁','300m/s','100人/厢','电','1')
    line1.run()
    """


    # 组合
    """
    class Equip:
    def fire(self):
    print("release Fire skill")

    class Riven:
    camp = 'Noxus'
    def __init__(self,nickname):
    self.nicknsme = nickname
    self.equip = Equip()

    r1 = Riven('ouayng')

    r1.equip.fire()#可以使用组合的类产生的对象所持有的方法

    """
    # 用组合的方式建立了类与组合的类之间的关系,他是一种'有'的关系,比如教授有生日,教授教python和linux课程
    # 教授有学生s1,s2,s3
    # example
    class pople:
    def __init__(self,name,age,sex):
    self.name = name
    self.age = age
    self.sex = sex

    class Course:
    def __init__(self,name,period,price):
    self.name = name
    self.period = period
    self.price = price

    def tell_info(self):
    print('<%s %s %s>'%(self.name,self.period,self.price))

    class Teacher(pople):
    def __init__(self,name,age,sex,job_title):
    super().__init__(name,age,sex)
    self.job_title = job_title
    self.course = []
    self.student = []

    class Student(pople):
    def __init__(self,name,age,sex):
    super().__init__(name,age,sex)
    self.course = []


    egon = Teacher('egon',18,'men','沙河霸道金牌讲师')
    s1 = Student('张三',20,'men')

    # 创建课程
    python = Course('python','3mons',3000.0)
    linux = Course('linux','2mons',4000.0)


    # 为老师和学生添加课程
    egon.course.append(python)
    egon.course.append(linux)
    s1.course.append(python)

    # 为老师添加学生
    egon.student.append(s1)


    for i in egon.course:
    print(i)

    for i in egon.student:
    print(i)

    r = egon.student
    print(r)





    # 多态与多态性
    # 多态指的是一类事物有多种形态,比如动物有多种形态:人,猪,狗

    """
    s = str('hello')
    l = list([1,2,3])
    t = tuple((4,5,6))

    s.__len__()
    l.__len__()
    t.__len__()

    len(s)
    len(l)
    len(t)
    """
    # 封装
    # 封装 = 隐藏
    # 在python中,用双下划线(__)开头的方式将属性隐藏起来
    # 其实这仅仅是一种变形操作
    # 类中所有双下划綫开头的名称如__x都会自动变形成: _类名__x的形式:

    #正常情况
    """
    class A:
    def fa(self):
    print('from A')

    def test(self):
    self.fa()

    class B(A):
    def fa(self):
    print('from B')

    b = B()
    b.test()
    """
    # 吧fa定义成私有的,即__fa
    """
    class A:
    def __fa(self):
    print('from A')

    def test(self):
    self.__fa()

    class B(A):
    def __fa(self):
    print('from B')

    b = B()
    b.test()
    """

    # 封装不是单纯意义的隐藏
    # 1、封装数据
    # 将数据隐藏起来不是目的。隐藏起来然后对外提供操作该数据的接口,
    # 然后我们可以在接口附加上对该数据上操作的限制,以此完成对数据属性操作的严格控制
    """
    class Teacher:
    def __init__(self,name,age):
    self.__name = name
    self.__age = age

    def tell_info(self):
    print('姓名:%s,年龄:%s' %(self.__name,self.__age))

    def set_info(self,name,age):
    if not isinstance(name,str):
    raise TypeError('姓名必须是字符串类型')

    if not isinstance(age,int):
    raise TypeError("年龄必须是整数型")
    self.__name = name
    self.__age = age

    t = Teacher("ouyang",18)
    t.tell_info()

    r = Teacher("xiaohui",19)
    r.set_info('ll',12)

    """

    # 2、封装方法:目的是隔离复杂度
    # 取款是功能,而这个功能有很多的功能组成:插卡,密码认证,输入金额,打印账单,取钱
    # 而对于使用者来说,只需要知道取款这个功能即可,其余功能我们都可以隐藏起来,
    # 很明显这么做隔离了复杂度,同时也提升了安全性
    """
    class ATM:
    def _card(self):
    print('插卡')

    def _suth(self):
    print('用户认证')

    def _input(self):
    print('输入取款金额')

    def _print_bill(self):
    print("打印账单")

    def _take_money(self):
    print('取款')


    def withdraw(self):
    self._card()
    self._suth()
    self._input()
    self._print_bill()
    self._take_money()

    a = ATM()
    a.withdraw()


    """


    # *****特性(property)******

    # property 是一种特殊的属性,访问他时会执行一段功能(函数)然后返回值
    # Ex:BMI指数 188页
    """
    class People:
    def __init__(self,name,weight,height):
    self.name = name
    self.weight = weight
    self.height = height

    @property
    def bmi(self):
    return self.weight / (self.height**2)

    p1 = People('ouyang',75,1.75)
    print(p1.bmi)
    """

    # ex:'晓晖'
    """
    class People:
    def __init__(self,name,weight,height):
    self.name = name
    self.weight = weight
    self.height = height

    @property
    def bmi(self):
    return self.weight/(self.height**2)

    p1 = People('xiaohui',65,1.60)
    print(p1.bmi)

    """


    # example 二
    # 圆的周长和面积
    """
    import math
    class Circle:
    def __init__(self,radius):
    self.radius = radius

    @property
    def area(self):#area面积
    return math.pi*self.radius**2

    @property
    def perimeter(self):#perimeter周长
    return math.pi*2*self.radius
    c = Circle(10)
    print(c.radius)
    print(c.area)
    print(c.perimeter)
    """

    # 绑定方法

    # 绑定给对象的方法
    # 绑定给类的方法(classmethod)
    # classmethod是给类用的,即绑定到类,类在使用时会将类本身当做参数传给
    # 类方法的第一个参数(即是对象来调用也会将类当做第一个参数传入)
    # python为我们内置了函数classmethod来把类中的函数定义成类方法


    # 非绑定方法 在内部用staticmethod 装饰的函数即非绑定方法,就是普通函数
    # statimethod不与类或对象绑定,谁都可以调用,没有自动传值效果
    """
    import hashlib
    import time
    class MySQL:
    def __init__(self,host,port):
    self.id = self.create_id()
    self.host = host
    self.port = port


    @staticmethod
    def create_id():
    m = hashlib.md5(str(time.time()).encode( 'utf-8'))
    return m.hexdigest()

    print(MySQL.create_id())
    conn = MySQL('127.0.0.1',3306)
    print(conn.create_id())



    """






  • 相关阅读:
    canvas 动画库 CreateJs 之 EaselJS(下篇)
    canvas 动画库 CreateJs 之 EaselJS(上篇)
    kafka消息的可靠性
    Gym 100851A Adjustment Office (思维)
    UVaLive 6854 City (暴力)
    UVaLive 6853 Concert Tour (DP)
    UVaLive 6847 Zeroes (找规律,水题)
    UVa 1645 Count (递推,数论)
    CCF 201509-3 模板生成系统 (STL+模拟)
    CCF 201509-2 日期计算 (水题)
  • 原文地址:https://www.cnblogs.com/ouyang99-/p/9066073.html
Copyright © 2011-2022 走看看