zoukankan      html  css  js  c++  java
  • Python 类

    1、多态

    在子类中重写父类的方法,用子类调用该方法,会执行子类重写的方法,用父类的对象调用,会执行父类的方法

    class Animal:
        def foo(self):
            print("Animal")
    
    class Cat(Animal):
        def foo(self):
            print("Cat")
    
    class Dog(Animal):
        def foo(self):
            print("Dog")
    
    a = Animal()
    b = Cat()
    c = Dog()
    
    a.foo()
    b.foo()
    c.foo()
    # Animal
    # Cat
    # Dog
    View Code

    2、封装

    把过程和数据包围起来,对数据的访问通过接口,不暴露实现过程

    class Person:
    
        def setName(self,name):
            self.name = name
    
        def getName(self):
            return self.name
    
        def greet(self):
            print("Hello,world! I am %s." % self.name)
    
    foo = Person()
    bar = Person()
    foo.setName('Luke')
    bar.setName('Sky')
    foo.greet()
    # Hello,world! I am Luke.
    bar.greet()
    # Hello,world! I am Sky.
    
    ## 设置私有属性和方法
    class Student():
        __number = 20170719
        name = "Chris"
        def __init__(self):
            print("我的学号%d"% self.__number)
        def __foo(self):
            print("我是私有方法")
        def printNumber(self):
            self.__foo()
    
    
    s = Student()
    # 我的学号20170719
    
    # s.__foo() # error
    
    s.printNumber()
    # 我是私有方法
    
    # print(s.__number) # error
    
    print(s.name)
    # Chris
    View Code

    3、继承

    单继承 、多继承、类和类之间的关系、类和对象之间的关系

    ## 单继承
    class Animal:
        def printName(self):
            print('Animal')
    
    class Dog(Animal):
        pass
    
    a = Animal()
    a.printName()
    # Animal
    
    d = Dog()
    d.printName()
    # Animal
    
    ## 多继承
    class Person:
        def whoIAm(self):
            print('人类')
    
    class Child(Animal,Person):
        pass
    
    c = Child()
    c.printName()
    # Animal
    c.whoIAm()
    # 人类
    
    ## 检测一个类是否是另一个类的子类
    print(issubclass(Dog,Animal))
    # True
    print(issubclass(Animal,Dog))
    # False
    
    ## 已知类的基类
    print(Dog.__bases__)
    # (<class '__main__.Animal'>,)
    print(Child.__bases__)
    # (<class '__main__.Animal'>, <class '__main__.Person'>)
    
    ## 一个对象属于哪个类
    print(c.__class__)
    # <class '__main__.Child'>
    print(a.__class__)
    # <class '__main__.Animal'>
    
    ## 如果使用__metaclass__ = type 或者从object继承的方式来定义新式类,那么可以使用type(s)查看实例的类
    class Tree:
        __metaclass__ = type
    
    t = Tree()
    print(type(t))
    # <class '__main__.Tree'>
    View Code

     4、练习总结

    class Calculator:
        def calculate(self,expression):
            self.value = eval(expression)
    
    class Talker:
        def talk(self):
            print('Hi,my value is',self.value)
    
    class TalkingCalculator(Calculator,Talker):
        pass
    
    tc = TalkingCalculator()
    tc.calculate('1+2*3')
    tc.talk()
    # Hi,my value is 7
    
    # 检测方法是否存在
    print(hasattr(tc,'talk')) # True
    print(hasattr(tc,'dfg'))  # False
    
    ## 确定对象是否是类的实例
    cc = Calculator()
    print(isinstance(tc,TalkingCalculator)) # True
    print(isinstance(tc,Calculator)) # True
    print(isinstance(cc,TalkingCalculator)) # False
    View Code
  • 相关阅读:
    第十一周总结
    代码大全第二版-阅读笔记03
    第十周总结
    第十四周总结
    第十三周总结
    图书管理系统
    《软件需求模式》阅读笔记(三)
    第十二周总结
    语义分析
    第十一周总结
  • 原文地址:https://www.cnblogs.com/chenyanliang/p/7211785.html
Copyright © 2011-2022 走看看