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
原文地址:https://www.cnblogs.com/chenyanliang/p/7211785.html