十七、Python面向对象之继承

在面向对象,继承是一个很重要的特性

子类与父类,子类是对父类的一种扩展,在父类的属性和方法上进行一些扩展

示例:没带继承

#定义一个带编号和状态的门的类

class Door(object):

def __init__(self,num,status):

self.num = num

self.status = status

def open(self):

self.status = ‘open‘

def close(self):

self.status = ‘close‘

#定义一个可以锁的门的类

class Lockable(object):

def __init__(self,num,status,locked):

self.num = num

self.status = status

self.locked = locked

def open(self):

if not self.locked: #如果没有锁的话,那么我就打开它

self.status = ‘open‘

else:

print "the door is locked"

def close(self):

self.status = ‘close‘

======================================================================

======================================================================

======================================================================

上例中我们发现Lockable这个类就是在Door类的基础上增加了一个locked实例变量

和有没有锁的方法,其他地方都是一样的。

#继承

class Door(object):

def __init__(self,num,status):

self.num = num

self.status = status

def open(self):

self.status = ‘open‘

def close(self):

self.status = ‘close‘

#继承自父类Door

class Lockable(Door):

def __init__(self,num,status,locked):

super(Lockable,self).__init__(num,status) #这里super说明了你构造函数继承了你的父类的num和status两个实例变量,里面的写法是固定的(子类名,self)

self.locked = locked #这里因为你继承了父类,所以我们这里就不用再self.num和self.status给它们赋值,locked是新增的,需要对其赋值

#对open方法进行重载

def open(self):

if not self.locked: #如果没有锁的话,那么我就打开它

#调用父类的方法

super(Lockable,self).open()

else:

print "the door is locked"

class Unlockable(Door): #这里我定义了一个没有锁的门,并且我什么都不做,它继承了父类Door,即使他什么都不做,Door的方法它也都继承下来了

pass

u = Unlockable(1,‘open‘)

print (u.status)

l = Lockable(1,‘open‘,True)

l.open()

print (l.status)

l = Lockable(1,‘open‘,False)

l.open()

print (l.status)

===========================================================================

===========================================================================

===========================================================================

静态方法:

@static_method #静态方法,类的工具包

def info() #不用加self,无需实例化,不能访问实例其他信息

@class_method #类方法,

def info(self): #能访问类变量,不能访问实例变量,不需要实例化,即可调用

@property #将函数变成静态属性,需实例化方可调用,如果不实例化则仅仅是打印内存地址,调用的时候不需要加()

def sayhi(self): #

print "-----say hi",self.name

return "test"

m = MyClass()

print (m.sayhi) #会打印出-----say hi

如果是这样:

print (MyClass.sayhi) #则仅仅只会打印出<property object at 0x0200F8A0>

如果是这样:

print (MyClass.sayhi()) #则会报错

=========================================================================

=========================================================================

=========================================================================

什么情况需要实例化才能调用,什么情况不需要实例化也能调用:

总结:

你只要看到有self的就代表需要实例化才能调用(仅仅在没有那三个特殊方法的情况下)

原文地址:https://www.cnblogs.com/steven9898/p/11329433.html

时间: 2024-10-07 16:30:33

十七、Python面向对象之继承的相关文章

Python面向对象特性 - 继承

面向对象有3大特性:继承.多态.封装,本章介绍 Python中的 继承 特性~? 什么是继承 继承是创建类的一种方式,在 Python中支持多继承,即在创建类的时候可以继承一个或者多个父类.在继承关系中,被继承的类通常称为父类(或超类,基类),新建的类则称为子类(或派生类).?继承的优势在于可以有效地重用代码,提高代码的可读性~?继承示例: class Fu_1: # 父类 pass class Fu_2: # 父类 pass class Zi_1(Fu_1): # 单继承 pass class

python面向对象之继承与派生

一.继承 继承是一种创建新的类的方式,在python中,新建的类可以继承自一个或者多个父类,原始类称为基类或超类,新建的类称为派生类或子类. python中类的继承分为:单继承和多继承,如果是多继承的话,继承顺序有深度和广度2种 示例: class ParentClass1: #定义父类 pass class ParentClass2: #定义父类 pass class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass pass

python面向对象之继承/多态/封装

老师说,按继承/多态/封装这个顺序来讲. 子类使用父类的方法: #!/usr/bin/env python # coding:utf-8 class Vehicle: def __init__(self,name,speed,load,power): self.name = name self.speed = speed self.load = load self.power = power def run(self): print("开动啦.") class Benz(Vehicle

python面向对象的继承

无话可说,继承主要是一些父类继承,代码是非常具体的 #!/usr/bin/env python #coding:utf-8 class Father(object):#新式类 def __init__(self): self.name='Liu' self.FamilyName='Yan' def Lee(self): print '我是父类函数Lee' def Allen(self): print "我是父类函数Allen" class Son(Father): def __init

Python面向对象之继承

python不支持多态 代码区: 1 class UniversityMember: 2 def __init__(self, name, age): 3 self.name = name; 4 self.age = age; 5 6 # 实例方法 7 def getName(self): 8 return self.name; 9 10 def getAge(self): 11 return self.age; 12 13 # 子类学生类继承父类 14 class Student(Univer

Python 面向对象编程——继承和多态

1.1   继承和多态 1.1.1   继承 当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super class). >>> class Animal(object): ...    def run(self): ...        print('Animal is running...') #父类 ... >>> class Dog(Ani

python 面向对象四 继承和多态

一.继承 1 class Animal(object): 2 def run(self): 3 print('Animal is running...') 4 5 class Dog(Animal): 6 7 def run(self): 8 print('Dog is running...') 9 10 def eat(self): 11 print('Eating meat...') 12 13 dog = Dog() 14 dog.run() 1 Dog is running... 当子类

Java ,python面向对象的继承及其区别

JAVA JAVA继承基本样式 class Demo extends Object{ Demo(int a){ this(); } Demo(){ super(); } } java默认继承Object 类, 并一定会在构造函数中调用super()方法,对父类进行实例化.注意:this()和super()不能同时出现在同一个构造函数中,但super()必须在其中一个构造函数中出现! Java实例化过程 运行父类的静态代码部分 再运行子类的静态代码部分 执行父类成员代码 执行父类构造函数 -- 父

python -- 面向对象编程(继承、重写)

一.继承 子类可以继承父类的所有公有成员,但不能直接访问父类的私有成员,只能通过父类的公有方法间接访问私有属性或私有方法. 如: class DerviedClassName(BaseClassName1[,BaseClassName2,......]): 语句1 语句2 ....... 语句N 公有属性既可以在类的内部进行访问,也可以在外部程序中使用. 派生类(子类)继承了基类(父类)的行为和属性之后,还可以增加某些特定的行为和属性. 继承分为单继承和多继承 A.单继承 # ---------