python自学(十三)——类的继承

一、类的继承和多态

类是可以继承的,python也不例外

  1. 直接将父类作为参数来声明一个新类:
    	class Student(object): // 这里就是指,默认的类的声明,就是继承自object
    		 def __init__(self):
    		 		pass
    
  2. 子类直接具有了父类的属性和方法
  3. 但是当子类声明和父类相同的方法时,会覆盖父类的方法,这种行为被称为多态。
    	#!usr/bin/env python3
    	class People():
    	    def __init__(self, name, sex):
    	        self.name = name
    	        self.sex = sex
    	    def getName(self):
    	        print("%s,这是父类的方法" % self.name)
    	    def getSex(self):
    	        print("%s, 这是父类的方法" % self.sex)
    	
    	
    	class Student(People):
    	    def getSex(self):
    	        print("这是覆盖的方法")
    	
    	peo = People("tom", "男")
    	stu = Student("jim", "女")
    	print(isinstance(peo, People)) // true
    	print(isinstance(stu, Student))   // true
    	print(isinstance(stu, People))   // true,可以看到stu同样是People的实例
    	peo.getSex()   // 男, 这是父类的方法
    	stu.getSex()    // 这是覆盖的方法   // 覆盖了继承自父类的方法
    	peo.getName()   // tom,这是父类的方法
    	stu.getName()    // jim,这是父类的方法
    

二、获取对象信息

1. type 方法

>type(123) 
> <class 'int'>

在基本数据类型中,可以直接打印显示,但是如果想判断一个对象是不是函数,那这样是不满足的了,这就需要types

2. types

它是python中的模块,分别有几个属性
a)types.FunctionType // 普通函数
b) types.BuildFunctionType // 内置函数
c) types.LambdaType // lambda函数
d) types.GeneratorType // 迭代器

3.isinstance

上一节已经提到了
isinstance (a,b) // 判断a是否是b的实例

同时这个是具有隔代有效的特性,即 A >> B >> C
c = C()
此时 :
isinstance(c , C) // true
isinstance(c, A) // true
注意 第二个参数可以是list或者tuple

4. dir()

	#!usr/bin/env python3
	class A():
	    def test(self):
	        pass
	a = A()
	print(dir(a))

打印结果如下:

	['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', 
	'__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', 
	'__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
	 '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'test']

属性很多
其中类比与js,它也有对应的setPrototype等:

hasattr
hadattr(a, ‘b’) // 判断a对象是否包含b属性

setattr
setattr(a, ‘b’, 12) //给a对象的b属性赋值

getattr
getattr(a,‘b’)

发布了60 篇原创文章 · 获赞 66 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/u012436704/article/details/100027751