快速了解Python面向对象编程

1、类——继承

# pyhton 中类可以继承一个或者多个父类
class ParentClass1:
    pass

class ParentClass2:
    pass

class SubClass1(ParentClass1): # 单继承
    pass

class SubClass2(ParentClass1,ParentClass2): # 多继承,逗号分割
    pass

# 查看继承
# _base_ 只查看从左到右继承的第一个子类
# _bases_ 查看所有继承的父类
print(ParentClass1.__base__,type(ParentClass1.__base__))
print(SubClass1.__base__,type(SubClass1.__base__))

print(SubClass2.__bases__) # 数据结构为元组

# python2中有经典类和新式类  python3中只有新式类
# python3中如果没有指定基类,都会默认继承object类,object类是所有python类中的基类


# 继承与抽象
# 抽象:通过抽象得到类
# 继承:基于抽象的结果,通过编程语言实现,先抽象,再经过继承表达
class Hero:
    def __init__(self,name,value,aggress):
        self.name = name
        self.value = value
        self.aggress = aggress
    def attack(self,enemy):
        self.value -= self.aggress
class Garen(Hero):
    pass
class Riven(Hero):
    pass
g1 = Garen('绿巨人',80,20)
# __dict__:类的静态函数、类函数、普通函数、全局变量以及一些内置的属性都是放在类__dict__里
print(g1.__dict__)

r1 = Riven('钢铁侠',200,34)
print(g1.value)
r1.attack(g1) # 疑惑区
print(g1.value)


# 属性查找
class Foo:
    def f1(self):
        print("Foo.f1")
    def f2(self):
        print("Foo.f2")
class Bar(Foo):
    def f2(self):
        print("Bar.f2")
b = Bar()
print("0",b.__dict__)
print("1",b.f1()) # 调用父类中的
print("2",b.f2())  # 调用自己的

# 派生
# 父类和子类都有的方法叫做方法的重写
# 父类里没有子类有的方法叫派生方法
class Riven(Hero):
    camp='Noxus'
    def __init__(self,nickname,aggressivity,life_value,skin):
        Hero.__init__(self,nickname,aggressivity,life_value) #调用父类功能
        self.skin=skin #新属性
    def attack(self,enemy): #在自己这里定义新的attack,不再使用父类的attack,且不会影响父类
        Hero.attack(self,enemy) #调用功能
        print('from riven')
    def fly(self): #在自己这里定义新的
        print('%s is flying' %self.nickname)

r1=Riven('锐雯雯',57,200,'皮皮')
r1.fly()
print(r1.skin)


不同文件夹下调用模块

# 同文件夹下
import Newpy
s = Newpy.Student("Tom","12","male")
s.learn()

# 不同文件夹下
import sys
sys.path.append(r'路径名')
from  Newpy import Student
s = Student("Tom","12","male")
s.learn()

继承原理

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')

class F(D,E):
    # def test(self):
    #     print('from F')
    pass
f1=F()
f1.test()
print(F.__mro__) #只有新式才有这个属性可以查看线性列表,经典类没有这个属性

组合

# 组合:在一个类中以另外一个列的对象作为数据属性(一个类的属性是另一个类的对象)
class Equip:
    def fire(self):
        print("Fire")
class Riven:
    camp='Noxus'
    def __init__(self,name):
        self.name = name
        self.equip = Equip() # 用Equip类产生一个装备,赋值给equip属性

r1 = Riven('公孙离')
r1.equip.fire()

# 继承:建立派生类与基类之间的关系,是一种‘是’的关系
# 组合:建立类与组合之间的关系,是一种‘有’的关系

class People:
    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(People):
    def __init__(self,name,age,sex,job_title):
        People.__init__(self,name,age,sex)
        self.job_title=job_title
        self.course=[]
        self.students=[]


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

Ton = Teacher('Ton',18,'male','猎头老师')
s1 = Student('jery',18,'female')

python = Course('python','3min',300)
linux = Course('linus','8min','300.0')
# 为老师和学生添加课程
Ton.course.append(python)
Ton.course.append(linux)
s1.course.append(python)

# 为老师添加学生
Ton.students.append(s1)

for obj in Ton.course:
    obj.tell_info()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值